Linux Cron作业终止和重新启动Python脚本

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

我在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.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
,仅当脚本需要提升权限时。良好实践:从没有开始,如果不起作用就添加。