Spaces:
Paused
Paused
| - name: My first play | |
| hosts: hostgroup | |
| remote_user: root | |
| vars: | |
| app_name: cursor2api | |
| app_port: 7860 | |
| deploy_path: /root/workspace/cursor2api | |
| # root 1349786 1344741 0 10:32 pts/0 00:00:00 npm run start --host 0.0.0.0 --port 8888 | |
| # root 1349797 1349786 0 10:32 pts/0 00:00:00 sh -c node src/app.js --host 0.0.0.0 --port 8888 | |
| # root 1349798 1349797 0 10:32 pts/0 00:00:00 node src/app.js --host 0.0.0.0 --port 8888 | |
| # 查找进程id 排除掉"sh -c"以及"grep"的 | |
| tasks: | |
| - name: 停止特定应用服务 | |
| shell: | | |
| pid=$(ps -ef | grep "node src/app.js" | grep -v "sh -c" | grep -v grep | grep "{{ app_port }}" | awk '{print $2}') | |
| if [ -n "$pid" ]; then | |
| echo "Stopping {{ app_name }} process with PID: $pid" | |
| kill -15 $pid | |
| sleep 3 | |
| if ps -p $pid > /dev/null 2>&1; then | |
| echo "Force killing process with PID: $pid" | |
| kill -9 $pid | |
| fi | |
| else | |
| echo "No running {{ app_name }} process found" | |
| fi | |
| args: | |
| executable: /bin/bash | |
| ignore_errors: yes | |
| - name: 确认服务已停止 | |
| wait_for: | |
| port: "{{ app_port }}" | |
| state: stopped | |
| timeout: 30 | |
| - name: 复制到远程服务器 | |
| copy: | |
| src: archive/release.tar.gz | |
| dest: /root/deploy/{{ app_name }}.tar.gz | |
| - name: 解压文件 | |
| shell: | | |
| rm -rf {{ deploy_path }} | |
| mkdir -p {{ deploy_path }} | |
| tar -zxvf /root/deploy/{{ app_name }}.tar.gz -C {{ deploy_path }} | |
| args: | |
| executable: /bin/bash | |
| - name: 构建并运行 | |
| shell: | | |
| cd {{ deploy_path }} | |
| echo '#!/bin/bash | |
| cd {{ deploy_path }} | |
| test -f $HOME/.nvm/nvm.sh && source $HOME/.nvm/nvm.sh | |
| npm install | |
| npm run start -- --host 0.0.0.0 --port {{ app_port }} | |
| ' > {{ deploy_path }}/start_app.sh | |
| chmod +x {{ deploy_path }}/start_app.sh | |
| nohup {{ deploy_path }}/start_app.sh > {{ deploy_path }}/nohup.log 2>&1 & | |
| args: | |
| executable: /bin/bash | |
| - name: 等待服务启动 | |
| wait_for: | |
| port: "{{ app_port }}" | |
| timeout: 30 | |