不要这样做!

不要这样做!

我有以下脚本应该运行 mongo DB 服务器并在重启后运行我的应用程序

这是我写的脚本:

sudo systemctl restart mongod
cd airnotifier/
sudo python3 ./app.py

然后我将此脚本添加到 crontab 以安排它在重启时运行

@reboot /home/user/project/script.sh

然后我使用命令重新启动机器

sudo reboot 

但什么都没有发生,有人能告诉我问题是什么吗?

答案1

不要这样做!

您的方法有两个错误。

  1. 不要使用 cron 启动 systemd 服务!Systemd 有自己的方法来在计算机启动/重启时启动服务。

  2. 不要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还需要命令的路径。

希望这可以帮助

相关内容