如何在啟動時以 root 權限啟動腳本?

如何在啟動時以 root 權限啟動腳本?

我嘗試使用 systemctl 和 crontab 但沒有成功。

這是腳本:

#!/bin/bash
cyberghostvpn --country-code AU --city Brisbane --connect

權利:

-rwxr-xr-x 1 pat pat 71 nov 28 13:04 ghoststart.sh

我的 crontab 是這樣運作的:sudo crontab -e

@reboot sleep 120; /home/pat/Documents/cyberghost/ghoststart.sh

我可以在終端機中運行腳本沒有問題:sudo sh ghoststart.sh

系統日誌 cron :

Nov 28 13:17:57 mrpotato cron[679]: (CRON) INFO (pidfile fd = 3)
Nov 28 13:17:57 mrpotato cron[679]: (CRON) INFO (Running @reboot jobs)
Nov 28 13:17:59 mrpotato CRON[726]: (root) CMD (sh /home/pat/Documents/cyberghost/ghoststart.sh)
Nov 28 13:24:04 mrpotato cron[658]: (CRON) INFO (pidfile fd = 3)
Nov 28 13:24:04 mrpotato cron[658]: (CRON) INFO (Running @reboot jobs)

似乎 cron 在 13:24:04 之後停止工作,因為在那之後我做了嘗試

編輯2:基於我努力了

root@mrpotato:/var/spool/cron/crontabs# /bin/sh -c "(export PATH=/usr/bin:/bin; /home/pat/Documents/cyberghost/ghoststart.sh </dev/null)"
Prepare OpenVPN connection ...
Please Install "openvpn" first!

如果我不是 root,它會給我同樣的錯誤,顯然 openvpn 已安裝

第三次編輯:

如果我這樣做,我不會得到任何錯誤。

pat@mrpotato:~$ sudo /bin/sh -c "(export PATH=/usr/bin:/bin; /home/pat/Documents/cyberghost/ghoststart.sh </dev/null)"

但如果我這樣做我會得到一個:

root@mrpotato:~# /bin/sh -c "(export PATH=/usr/bin:/bin; /home/pat/Documents/cyberghost/ghoststart.sh </dev/null)"

錯誤是:

Traceback (most recent call last):
  File "cyberghostvpn.py", line 580, in <module>
  File "cyberghostvpn.py", line 346, in main
  File "libs/config.py", line 45, in __init__
  File "libs/config.py", line 112, in readConfigFile
Exception: The config file "/home/root/.cyberghost/config.ini" does not exist!
[3845] Failed to execute script cyberghostvpn

config.ini 存在於/home/pat/.cyberghost/

cron 必須以 root 身分執行腳本,而不是使用 sudo...或類似的東西,腳本從正在執行的使用者取得檔案...如果有意義的話。

我不知道如何解決這個問題!

答案1

您的ghoststart.sh腳本(或cyberghostvpn其中的內容)正在嘗試透過呼叫openvpn可執行檔來啟動 OpenVPN。在$PATH腳本中找不到此可執行檔。在終端機中使用command -v openvpn來尋找可執行檔的路徑。

如果您的openvpn可執行檔位於/usr/sbin,您可以將 crontab 計畫編寫為

@reboot sleep 120 && PATH="$PATH:/usr/sbin" /home/pat/Documents/cyberghost/ghoststart.sh

您的「第三次編輯」也表示該工具正在啟動該工具的使用者的主目錄中尋找設定檔。您說您的主目錄中有此文件pat,而不是 的主目錄中root

您在這裡有兩個選擇:

  1. 將設定檔移到工具期望找到它的位置,或者
  2. 告訴工具在哪裡HOME

第二個選項可以透過修改 cron 作業來完成

@reboot sleep 120 && HOME=/home/pat PATH="$PATH:/usr/sbin" /home/pat/Documents/cyberghost/ghoststart.sh

答案2

root@mrpotato:/var/spool/cron/crontabs# /bin/sh -c "(export PATH=/usr/bin:/bin;/home/pat/Documents/cyberghost/ghoststart.sh

你的 openvpn 二進位位於哪裡?在我的 Debian 上,它不是/usr/sbin您傳遞給腳本的 PATH 變數的一部分...這解釋了您遇到的錯誤。

相關內容