我在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 &
答案 0 :(得分:2)
我猜run.py
的运行时间为python
,而不是run.py
。所以你找不到任何kill -f run.py
。
您应该将进程的PID回显到文件,如果它仍在运行,则使用该值来终止先前的进程。只需添加echo $! >/path/to/pid.file
作为start.sh
脚本中的最后一行即可。
了解更多:
让您入门的示例:
#!/bin/bash
echo "Running..."
sudo pkill -F /path/to/pid.pid
sudo python /path/to/run.py &
echo $! > /path/to/pid.pid
答案 1 :(得分:0)
另一种替代方法是,如果您使用的是支持upstart的系统,则可以在upstart上运行python脚本。然后你可以在开始时sudo /sbin/start job_name
sudo /sbin/stop job_name
,这使得upstart为你管理pids。
Python upstart脚本 Upstart python script