起動時に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

システムログクローン:

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!

ルートでない場合、同じエラーが発生します。明らかに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実行可能ファイルを呼び出してOpenVPNを起動しようとしますcyberghostvpn。スクリプトに実行可能ファイルが見つかりませんopenvpn。実行可能ファイルのパスを見つけるには、$PATH端末で使用してください。command -v openvpn

openvpn実行可能ファイルがにある場合は、/usr/sbincrontabスケジュールを次のように作成できます。

@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 "(エクスポート PATH=/usr/bin:/bin;/home/pat/Documents/cyberghost/ghoststart.sh

openvpnバイナリはどこにありますか?私のDebianでは、/usr/sbinスクリプトに渡すPATH変数の一部ではありません。これは発生するエラーを説明します。

関連情報