研究
也许我使用了错误的词汇,但我似乎找不到问题的重复。我试图在我的 shell 脚本中执行两个程序,而 cron 显然正在执行第一个脚本,但没有执行第二个脚本。
目标
我有两个 Python 脚本,views.py
它们作为 Web 服务器运行,并housekeeping.py
负责一些 Web 界面无需担心的清理和更新检查。目前,这些脚本可以手动启动,sudo /home/ubuntu/start_server.sh
并且运行正常。我使用的是端口 80,因此我需要以 root 身份运行。
Bash 脚本
完整的 bash 脚本:
#!/bin/bash
/home/ubuntu/py3env/bin/python /home/ubuntu/flask_portal/views.py &
/home/ubuntu/py3env/bin/python /home/ubuntu/flask_portal/housekeeping.py &
我的理解是这&
会导致应用程序在后台运行。
当我手动执行时,shell 脚本运行完美。
定时任务
要打开 crontab,我使用
sudo crontab -u root -e
正如我上面所说,我正在使用端口 80,所以我需要以 root 身份运行我的脚本。
在 crontab 文件中,我有一个条目:
@reboot /home/ubuntu/start_server.sh
结果
当我手动执行时,两个脚本都完美启动。当我允许服务器重新启动并运行脚本start_server.sh
本身时,Web 服务器views.py
工作正常,但housekeeping.py
从未启动(我正在该文件中进行日志记录,因此它没有生成正确的文件)。此外,当我执行时python aux | grep python
,我看到和都views.py
在housekeeping.py
执行。
答案1
感谢muru,我找到了我的问题的答案。
事实上,bash 脚本和 cron 作业运行正常。housekeeping.py
当以“root”而不是“ubuntu”身份执行时,会出现错误,但我看不到。
通过在 Bash 脚本顶部添加以下内容可以发现错误:
exec 2>/home/ubuntu/log
其效果是将 bash 脚本中启动的所有程序的输出通过管道传输到日志文件中。