- 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