我有以下脚本应该运行 mongo DB 服务器并在重启后运行我的应用程序
这是我写的脚本:
sudo systemctl restart mongod
cd airnotifier/
sudo python3 ./app.py
然后我将此脚本添加到 crontab 以安排它在重启时运行
@reboot /home/user/project/script.sh
然后我使用命令重新启动机器
sudo reboot
但什么都没有发生,有人能告诉我问题是什么吗?
答案1
不要这样做!
您的方法有两个错误。
不要使用 cron 启动 systemd 服务!Systemd 有自己的方法来在计算机启动/重启时启动服务。
不要
sudo
在 cron 作业中使用的脚本中使用。您还需要提供文件/程序的完整路径。
1. 使用enable
由于mongod
已经是 systemd 服务,因此您无需在系统重启时手动启动它。它应该会自动启动。如果它没有启动,请使用以下命令只有一次:
sudo systemctl enable mongod
笔记。一旦使用此命令,mongod.service 就会在计算机启动时自动启动。
如果由于某种原因这不起作用,请使用更多细节更新您的问题,例如当您使用上述命令时遇到什么错误。
2.使用sudo crontab e
当您希望通过 以管理员权限运行脚本时cron
,请不要输入sudo
脚本。
使用 删除现有行crontab -e
。
然后使用命令:
sudo crontab -e
然后在文件中添加以下行:
@reboot /home/user/project/script.sh
其中 script.sh 应如下所示:
#!/bin/bash
cd /full/path/to/airnotifier/
/usr/bin/python3 /full/path/to/airnotifier/app.py
您需要完整路径的原因,例如/home/USER/project/airnotifier/
因为当cron
以用户身份启动时root
(记住sudo
之前的crontab -e
),它不会在您的用户目录中启动。
cron 的另一个缺点是它没有完整的 PATH 等所有环境变量。因此您可能python3
还需要命令的路径。
希望这可以帮助