Linux Cron作业终止和重新启动Python脚本
我在linux服务器上设置了一个cron作业,每隔一天杀死并重新启动一个python脚本(run.py)。我将作业设置为以root用户身份运行,但我发现有时它无法正确终止进程(并导致连续运行两个脚本) 有更好的方法吗 我的cron作业参数:Linux Cron作业终止和重新启动Python脚本,linux,bash,shell,Linux,Bash,Shell,我在linux服务器上设置了一个cron作业,每隔一天杀死并重新启动一个python脚本(run.py)。我将作业设置为以root用户身份运行,但我发现有时它无法正确终止进程(并导致连续运行两个脚本) 有更好的方法吗 我的cron作业参数: 08**1,4,7 cd/home/myUser&&./start.sh start.sh: #!/bin/bash echo "Running..." sudo pkill -f run.py sudo python run.py & 我猜run
08**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
脚本中的最后一行
阅读更多:
开始的示例:
#!/bin/bash
echo "Running..."
sudo pkill -F /path/to/pid.pid
sudo python /path/to/run.py &
echo $! > /path/to/pid.pid
另一种替代方法是,如果您在支持upstart的系统上,则让python脚本在upstart上运行。然后您可以在开始时执行
sudo/sbin/start job_name
,然后执行sudo/sbin/stop job_name
,这使upstart可以为您管理PID
Python upstart脚本
脚本可能应该有一个shebang。很好的一点,当我将脚本复制到这里时,我遗漏了这一部分…我需要sudo吗?@GeorgePamfilis for
pkill
,前提是该进程是由启动cron的用户以外的其他用户启动的。对于python
,仅当脚本需要提升权限时。良好实践:从没有开始,如果不起作用就添加。