私はRed Hat Linux 8
Flaskスクリプトを実行するためにsystemctrlコマンドを使用しており、作成したいと思います。
次のように手動で起動すると、スクリプトが正しく実行されます。/bin/bash /data_pyt/ro/python_script/folder_python/scripts/python_script.sh
私の設定は次のとおりです。
adminUser:/etc/systemd/system# sudo vi python_script.service
[Unit]
Description=Product
After=network.target
[Service]
Type=simple
User=flask
Group=flask
ExecStart="/bin/bash /data_pyt/ro/python_script/folder_python/scripts/python_script.sh"
Restart=always
RestartSec=10s
SyslogIdentifier=python_script
[Install]
WantedBy=multi-user.target
~
サービスを開始すると、次のようになります。
adminUser:/etc/systemd/system# sudo systemctl daemon-reload
adminUser:/etc/systemd/system# sudo systemctl restart python_script.service
adminUser:/etc/systemd/system# sudo systemctl status python_script.service
python_script.service - Product routing
Loaded: loaded (/etc/systemd/system/python_script.service; disabled; vendor preset: disabled)
Active: activating (auto-restart) (Result: exit-code) since Tue 2021-08-03 15:26:42 CEST; 4s ago
Process: 444293 ExecStart=/bin/bash /data_pyt/ro/python_script/folder_python/scripts/python_script.sh (code=exited, status=203/EXEC)
Main PID: 444293 (code=exited, status=203/EXEC)
adminUser:/etc/systemd/system# sudo systemctl enable python_script.service
Created symlink /etc/systemd/system/multi-user.target.wants/python_script.service → /etc/systemd/system/python_script.service.
adminUser:/etc/systemd/system# sudo systemctl status python_script.service
python_script.service - Product routing
Loaded: loaded (/etc/systemd/system/python_script.service; enabled; vendor preset: disabled)
Active: activating (auto-restart) (Result: exit-code) since Tue 2021-08-03 15:27:13 CEST; 5s ago
Process: 444404 ExecStart=/bin/bash /data_pyt/ro/python_script/folder_python/scripts/python_script.sh (code=exited, status=203/EXEC)
Main PID: 444404 (code=exited, status=203/EXEC)
Tasks: 0 (limit: 101113)
Memory: 0B
CGroup: /system.slice/python_script.service
ディレクトリscripts/python_script.sh
と*.sh
ファイルchmod 777
また、パスは/bin/bash /data_pyt/ro/python_script/folder_python/scripts/python_script.sh
手動で開始すると有効です。
エラーのある場所やエラーを見つける方法について提案がありますか?
返信ありがとうございます!
ベストアンサー1
また、/bin/bash /data_pyt/ro/python_script/folder_python/scripts/python_script.sh パスは手動で起動する場合に有効です。
それは道ではありません。これは実際に二つスペースで区切られたパス。うまくいかないのは、二重引用符がシステムにそれをパスとして解釈するように指示するためです。
悪い(構文には引用符は必要ありません。代わりに部分ExecStart 値を設定し、2 つの単語が単一の単語として扱われるようにします。
ExecStart="/bin/bash /data_pyt/ro/python_script/folder_python/scripts/python_script.sh"
良い(引用は不要):
ExecStart=/bin/bash /data_pyt/ro/python_script/folder_python/scripts/python_script.sh
より良い(スクリプトがすでに+ xの場合、通訳は重複しています)
ExecStart=/data_pyt/ro/python_script/folder_python/scripts/python_script.sh
より良い点は次のとおりです(フルシェルスクリプトは通常重複します)。
WorkingDirectory=/data_pyt/ro/python_script/folder_python Environment=PYTHONPATH=/data_pyt/ro/python_script/etc/etc/etc Environment=FLASK_APP=whatever ExecStart=/usr/bin/flask run
手動で起動するときは、全体に二重引用符を使用しても機能しません。
$ /bin/bash /tmp/hello.sh
Hello!
$ "/bin/bash /tmp/hello.sh"
-bash: /bin/bash /tmp/hello.sh: No such file or directory
たとえば、どこにいますか?会議systemdから引用する必要があります。特定のパラメータは引用されますが、ExecStart全体は引用されません。
Environment=EXAMPLE=whatever "THING=Value with spaces" FLASK_APP=spaces
ExecStart=/bin/bash "/home/Carol/My Projects/Paths With Spaces/script.sh" --daemon