为什么 Crontab 在重启时不执行我的脚本?

为什么 Crontab 在重启时不执行我的脚本?

我有一个启动位于 /home/webserver/run-website 的网站的脚本

#!/bin/bash

echo "launching website..."

service nginx start

cd /home/webserver/django_personal_website

screen -S website /home/webserver/uwsgi_run

uwsgi_run 文件如下所示

#!/bin/bash

uwsgi --socket blog.sock --module django_personal_website.wsgi --chmod-socket=666

当我尝试使用 ./run-website 独立测试第一个脚本时,它运行良好。

我希望 Crontab 在重启时执行此脚本,因此我在 sudo crontab -e 中添加了以下行

@reboot bash /home/webserver/run-website

我甚至在终端中测试了命令 bash /home/webserver/run-website,它也可以运行,但由于某种原因,当我重新启动电脑时,它无法启动网站。

有人知道为什么会发生这种情况吗?

答案1

Screen 需要 tty 才能启动。Crontab 作业不需要 tty。

在屏幕内运行 uwsgi 可能没有必要。

如果可以的话,最好将其作为 systemd 服务启动,而不是在 cron 作业中运行此屏幕。乍一看,这些说明似乎可能有用https://uwsgi-docs.readthedocs.io/en/latest/Systemd.html

如果无法将其设置为 systemd 服务,还有其他几种方法可以允许后台作业将其输出保存到日志文件。

相关内容