Cron 作业终止并重新启动 Python 脚本
Cron Job Killing and Restarting Python Script
我在 linux 服务器上设置了一个 cron 作业,每隔一天终止并重新启动一个 python 脚本 (run.py)。我将作业设置为以 root 身份运行,但我发现有时它无法正确终止进程(并最终连续运行两个脚本)。
有更好的方法吗?
我的 cron 作业参数:
0 8 * * 1,4,7 cd /home/myUser && ./start.sh
start.sh:
#!/bin/bash
echo "Running..."
sudo pkill -f run.py
sudo python run.py &
我猜 run.py
运行为 python
,而不是 run.py
。所以你不会找到任何带有 kill -f run.py
.
的东西
您应该将进程的 PID 回显到一个文件中,如果它仍然是 运行,则使用该值来终止前一个进程。只需将 echo $! >/path/to/pid.file
添加到 start.sh
脚本的最后一行即可。
阅读更多:
- https://serverfault.com/questions/205498/how-to-get-pid-of-just-started-process
- How to read a file into a variable in shell?
- http://www.cyberciti.biz/faq/kill-process-in-linux-or-terminate-a-process-in-unix-or-linux-systems/
入门示例:
#!/bin/bash
echo "Running..."
sudo pkill -F /path/to/pid.pid
sudo python /path/to/run.py &
echo $! > /path/to/pid.pid
另一种替代方法是在支持 upstart 的系统上制作 python 脚本 运行。然后你可以在开始时做 sudo /sbin/start job_name
和 sudo /sbin/stop job_name
这使得 upstart 为你管理 pids。
Python 脚本新贵
我在 linux 服务器上设置了一个 cron 作业,每隔一天终止并重新启动一个 python 脚本 (run.py)。我将作业设置为以 root 身份运行,但我发现有时它无法正确终止进程(并最终连续运行两个脚本)。
有更好的方法吗?
我的 cron 作业参数:
0 8 * * 1,4,7 cd /home/myUser && ./start.sh
start.sh:
#!/bin/bash
echo "Running..."
sudo pkill -f run.py
sudo python run.py &
我猜 run.py
运行为 python
,而不是 run.py
。所以你不会找到任何带有 kill -f run.py
.
您应该将进程的 PID 回显到一个文件中,如果它仍然是 运行,则使用该值来终止前一个进程。只需将 echo $! >/path/to/pid.file
添加到 start.sh
脚本的最后一行即可。
阅读更多:
- https://serverfault.com/questions/205498/how-to-get-pid-of-just-started-process
- How to read a file into a variable in shell?
- http://www.cyberciti.biz/faq/kill-process-in-linux-or-terminate-a-process-in-unix-or-linux-systems/
入门示例:
#!/bin/bash
echo "Running..."
sudo pkill -F /path/to/pid.pid
sudo python /path/to/run.py &
echo $! > /path/to/pid.pid
另一种替代方法是在支持 upstart 的系统上制作 python 脚本 运行。然后你可以在开始时做 sudo /sbin/start job_name
和 sudo /sbin/stop job_name
这使得 upstart 为你管理 pids。
Python 脚本新贵