Systemctrl サービスが 203 で終了しました。スクリプトが「手動」で始まっても機能します。

Systemctrl サービスが 203 で終了しました。スクリプトが「手動」で始まっても機能します。

私はRed Hat Linux 8Flaskスクリプトを実行するために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

おすすめ記事