重启后运行脚本

Ami*_*ail 0 scripts cron

我有以下脚本应该运行 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)

但什么也没发生,谁能告诉我出了什么问题吗?

use*_*186 5

不要那样做!

你的方法有两点错误。

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

  2. 不要sudo在将在 cron 作业中使用的脚本内部使用。您还需要提供文件/程序的完整路径。

1. 使用enable

由于mongod它已经是一个systemd服务,因此您不需要在系统重新启动时手动启动它。它应该自动启动。如果没有启动,请仅使用以下命令一次

sudo systemctl enable mongod
Run Code Online (Sandbox Code Playgroud)

笔记。使用此命令后,mongod.service 应在计算机启动时自动启动。

如果由于某种原因这不起作用,请使用更多详细信息更新您的问题,例如使用上述命令时遇到的错误。

2. 使用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因此您可能还需要命令的路径。

希望这可以帮助