システム実行と通常のシェル実行の比較?

システム実行と通常のシェル実行の比較?

システムサービスが起動時に毎分スクリプトを実行することを試みます。スクリプトのステップの1つは、VPN接続を確立することです。このステップは systemd サービスとして実行すると失敗します。

サービスファイル:

[Unit]
Description=Run the checkvpn bash script

[Service]
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
ExecStart=/usr/local/bin/checkvpn.sh

タイマーファイル

[Unit]
Description=checkvpn service timer

[Timer]
OnActiveSec=60
OnCalendar=*-*-* *:*:00
Unit=checkvpn.service

[Install]
WantedBy=multi-user.target

バッシュスクリプト:

#!/bin/bash -l
if [ "$EUID" -ne 0 ]
  then echo "Please run as root"
  exit
fi

isVpnConnected() {
  if [[ $(cyberghostvpn --status) =~ "Wireguard connection found" ]]; then
    return 0
  else
    return 1
  fi
}

isDockerRunning() {
  if [[ $(docker ps) =~ "some-docker-image" ]]; then
    return 0
  else 
    return 1
  fi
}

if isVpnConnected; then
  if isDockerRunning; then
    echo "vpn and docker ok"
  else
    echo "vpn ok, but docker is not running, starting docker ..."
    docker-compose -f /home/davy/git/nookie-config/docker-compose.yaml up -d
  fi
else
  echo "vpn not ok, connecting ..."
  cyberghostvpn --traffic --wireguard --country-code ES --connect
  if isVpnConnected; then
    if isDockerRunning; then
      echo "vpn restored, but docker was still running without vpn"
    else
      echo "vpn fixed, restarting docker ..."
      docker-compose -f /home/davy/git/nookie-config/docker-compose.yaml up -d
    fi
  else
   echo "unable to fix vpn, stopping dockers ..."
   docker-compose -f /home/davy/git/nookie-config/docker-compose.yaml down
  fi
fi

私が得るエラー:

Feb 12 14:14:02 nookie checkvpn.sh[8490]: Traceback (most recent call last):
Feb 12 14:14:02 nookie checkvpn.sh[8490]:   File "cyberghostvpn.py", line 5, in <module>
Feb 12 14:14:02 nookie checkvpn.sh[8490]:   File "<frozen importlib._bootstrap>", line 991, in _find_and_load
Feb 12 14:14:02 nookie checkvpn.sh[8490]:   File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
Feb 12 14:14:02 nookie checkvpn.sh[8490]:   File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
Feb 12 14:14:02 nookie checkvpn.sh[8490]:   File "/usr/local/lib/python3.8/dist-packages/PyInstaller/loader/pyimod03_importers.py", line 623, in exec_module
Feb 12 14:14:02 nookie checkvpn.sh[8490]:   File "configs/base.py", line 3, in <module>
Feb 12 14:14:02 nookie checkvpn.sh[8490]:   File "configs/base.py", line 12, in BaseConfiguration
Feb 12 14:14:02 nookie checkvpn.sh[8490]: TypeError: can only concatenate str (not "NoneType") to str
Feb 12 14:14:02 nookie checkvpn.sh[8490]: [8490] Failed to execute script cyberghostvpn

明らかに、Cyber​​ghost cliユーティリティはPythonで書かれており、何かをインポートできません。私はsystemd環境が私の​​ユーザー環境と異なると仮定していますが、正確に何がわかりません。また、私の環境にあるのと同じパス変数を提供しようとしましたが、何も解決しませんでした。

どんなアイデアがありますか?

davy@nookieの出力: ~$ sudo find / -name "cybergho*"

    /home/davy/cyberghostvpn-ubuntu-20.04-1.3.4
    /home/davy/cyberghostvpn-ubuntu-20.04-1.3.4/cyberghost
    /home/davy/cyberghostvpn-ubuntu-20.04-1.3.4/cyberghost/cyberghostvpn
    /home/davy/cyberghost
    find: ‘/proc/6687’: No such file or directory
    /usr/bin/cyberghostvpn
    /usr/local/cyberghost
    /usr/local/cyberghost/cyberghostvpn
    /etc/wireguard/cyberghost.conf

答え1

systemd環境が私の​​ユーザー環境と異なると仮定していますが、どうなるかわかりません。

(非常に)短いスクリプトで見つけることができます。

#!/bin/bash
printenv > /home/davy/environment_"$( date +%s )"

スクリプトはprintenvすべての環境変数を一覧表示するコマンドを実行し、出力をに保存します/home/davy/environment_xxxxxxxxxxxxxxxxxxxxファイル名の一部は、秒単位の現在のUnixタイムスタンプです。 (私がこの特定のファイル名を選択した唯一の理由は、スクリプトが実行されるたびにファイルを上書きしないためですが、名前と保存場所は明らかに変更できます。必要なコンテンツ)。

systemd.service生成されたファイルとシェルを使用して同じスクリプトを実行したときに生成されたファイルを比較できるように、このスクリプトを実行しますsudo。これら2つのファイルの違いによってわかりますsystemd

これはありそうもないことで、うまくいけば驚くでしょう。ただし、Vars変数(1行に1つずつ、形式で)のみを一覧表示するファイル(または必要な名前)を作成できます。出力は正確に次のようになります。 same printenv)が存在するsudoが存在しないsystemd場合は、ファイルEnvironment=PATH=...の行を.serviceに変更してEnvironmentFile=/path/to/Varsからを使用してサービスを再起動しますsudo systemctl daemon-reload

FWIW、ユーザーがCyber​​ghostで自動化しようとしたとき、cron他の場所で述べたのと同じPythonエラーが見つかりました。彼は私が理解できず、保証できない方法で作業することができましたが、おそらくより良い結果を得ることができます。運:

https://forum.ubuntu-fr.org/viewtopic.php?id=2060369(フランス国民)

英語翻訳)

関連情報