
こんにちは、状況は次のとおりです。
私はAWSのubuntuベースのEC2マシンに接続しています(現在Ubuntu 18.04を使用しています)。マシン内でファイルを管理し、端末でスクリプトを実行できますが、接続されていない場合でもマシンでスクリプトを実行したいと思います。だからサービスを考えました。
systemdを使用して/lib/systemd/systemでこのファイルを見つけました。
[Unit]
Description=Test Service
After=network.target
[email protected]
[Service]
Type=simple
ExecStart=/usr/bin/python3 /home/ubuntu/GreenHouse/Catalog/Catalog_REST.py
StandardInput=tty-force
[Install]
WantedBy=multi-user.target
サービスを開始しましたが、ステータスを確認してみました。
sudo systemctl status CATALOG_REST-py.service
次のエラーが発生します。
● CATALOG_REST-py.service - Test Service
Loaded: loaded (/lib/systemd/system/CATALOG_REST-py.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Sun 2021-08-22 16:54:13 UTC; 1s ago
Process: 23968 ExecStart=/usr/bin/python3 /home/GreenHouse/Catalog/Catalog_REST.py (code=exited,
status=1/FAILURE)
Main PID: 23968 (code=exited, status=1/FAILURE)
Aug 22 16:54:13 ip-172-31-13-245 systemd[1]: Started Test Service.
Aug 22 16:54:13 ip-172-31-13-245 systemd[1]: CATALOG_REST-py.service: Main process exited, code=exited, status=1/FAIL
Aug 22 16:54:13 ip-172-31-13-245 systemd[1]: CATALOG_REST-py.service: Failed with result 'exit-code'.
端末で実行するとうまくいくとpython3 /home/GreenHouse/Catalog/Catalog_REST.py
言いたいです。
証明書を取得するいくつかの方法を知っていますか?エラーのより良い説明?
答え1
ジョブがによって実行されているcron
か、systemd
起動スクリプトがデスクトップで実行されているのと同じランタイム環境で実行されていません。systemd
でスクリプトを起動しますroot
。変更やその他の環境変数の設定は、ジョブにPATH
自動的に伝播されませんcron
。たとえば、no$DISPLAY
なので、GUIプログラムには特別な処理(読み取りman xhost
)が必要です。
cron
環境変数は、すべてのジョブの読み取りファイルで設定できます。crontab
man 5 crontab
echo "=== id ===";id;echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias
各環境の結果を確認してください。
その行はデフォルトで解釈されるため、構文はcommand
それよりも単純なので、環境を設定した後に必要なプログラムを呼び出すスクリプト(実行可能、インストール、開始)を呼び出すことをお勧めします。crontab
/bin/sh
/bin/bash
command
bash
#!/bin/bash