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