不要那樣做!

不要那樣做!

我有以下腳本應該運行 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/時(記住之前),那麼它將不會在您的使用者目錄中啟動。cronrootsudocrontab -e

關於 cron 的另一件事是它沒有像完整路徑那樣的所有環境變數。因此您可能python3還需要命令的路徑。

希望這可以幫助

相關內容