我有以下腳本應該運行 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 的另一件事是它沒有像完整路徑那樣的所有環境變數。因此您可能python3
還需要命令的路徑。
希望這可以幫助