研究

研究

研究

也许我使用了错误的词汇,但我似乎找不到问题的重复。我试图在我的 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.pyhousekeeping.py执行。

答案1

感谢muru,我找到了我的问题的答案。

事实上,bash 脚本和 cron 作业运行正常。housekeeping.py当以“root”而不是“ubuntu”身份执行时,会出现错误,但我看不到。

通过在 Bash 脚本顶部添加以下内容可以发现错误:

exec 2>/home/ubuntu/log

其效果是将 bash 脚本中启动的所有程序的输出通过管道传输到日志文件中。

相关内容