![Cron 中的 Bash 脚本未在 Ubuntu 20.04.2 LTS 服务器上运行 Python 脚本](https://linux22.com/image/939683/Cron%20%E4%B8%AD%E7%9A%84%20Bash%20%E8%84%9A%E6%9C%AC%E6%9C%AA%E5%9C%A8%20Ubuntu%2020.04.2%20LTS%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E8%BF%90%E8%A1%8C%20Python%20%E8%84%9A%E6%9C%AC.png)
我有一个 Ubuntu 20.04.2 LTS 服务器,其中运行了一些 Python 脚本,我创建了一个cronjob
运行 Bash 脚本来检查我的 Python 脚本是否正在运行。
脚本如下:
#!/bin/sh
#!/bin/python2.7
SERVICE="start_server.py"
if ps -ef | grep "$SERVICE" | grep -v grep >/dev/null
then
echo "start_server.py is running" >> /home/ubuntu/mislaka/script_log.log
else
python2.7 /home/ubuntu/mislaka/start_server.py &
echo "start_server.py stopped" >> /home/ubuntu/mislaka/script_log.log
fi
这是cronjob
配置:
* * * * * /home/ubuntu/mislaka/check_process.sh
检查log
文件时,我可以看到它正在echo
向文件添加命令,但并未启动 Python 脚本。如果我在外部运行脚本,它cronjob
会按预期运行。
有任何想法吗?
答案1
bash 和 sh shell 之间存在一些差异。如果您使用 bash,则应使用:
#!/bin/bash
答案2
发现了我的问题所在。我没有在 else 语句下用一行写命令,而是用两行写:
echo "start_server.py stopped" >> /home/ubuntu/mislaka/script_log.log && python2.7 start_server.py &
这解决了我的问题。