私は、単に開始または停止引数を持つ Python スクリプトを呼び出す systemd 起動スクリプトを作成しました。このスクリプトは、シェルから手動で実行すると機能しますが、systemctl start foo または systemctl stop foo を実行すると機能しません。
[Unit]
Description=foo Backends
After=network.target remote-fs.target nss-lookup.target
[Service]
ExecStart=/opt/foo/scripts/init_backends.py start
ExecStop=/opt/foo/scripts/init_backends.py stop
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
シェルから/opt/foo/scripts/init_backends.py startを呼び出すと問題なく動作することに注意してください。
答え1
以下の設定を使用すると動作するようになりました。StandardOutput=ttyが鍵だったと思います
[Unit]
Description=foo Backends
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/opt/foo/scripts/init_backends.py start
ExecStop=/opt/foo/scripts/init_backends.py stop
User=root
Group=root
TimeoutSec=300
StandardOutput=tty
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target