起動時にルート権限でスクリプトを起動するにはどうすればいいですか?

起動時にルート権限でスクリプトを起動するにはどうすればいいですか?

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

syslog クローン:

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)

13:24:04以降、cronが動作を停止したようです。それ以降に試行したのですが

編集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!

ルート権限がない場合にも同じエラーが発生します。明らかにopenvpnがインストールされています。

3回目の編集:

これを実行するとエラーは発生しません。

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 はスクリプトを sudo ではなく root として実行する必要があります...またはそれに似た方法で、スクリプトは実行中のユーザーからファイルを取得します...それが理にかなっている場合。

それをどう解決すればいいのか全く分かりません!

答え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

「3 回目の編集」では、ツールがツールを起動したユーザーのホーム ディレクトリで構成ファイルを探していることも示されています。このファイルは のホーム ディレクトリにあるのであって、 のpatホーム ディレクトリにあるのではないとおっしゃっていますroot

ここでは 2 つのオプションがあります。

  1. 設定ファイルをツールが見つけられる場所に移動するか、
  2. ツールに場所HOMEを伝えます。

2番目のオプションは、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 変数の一部ではない場所にあります...これが、発生したエラーの原因です。

関連情報