システムサービスはデフォルトスクリプトの出力を記録しません。

システムサービスはデフォルトスクリプトの出力を記録しません。

システム単位ファイルがあります。

[Unit]
Description = testtesttest
After = network.target

[Service]
Type = simple
ExecStart = /usr/bin/python3.9 -u /home/pi/initialize.py
PIDFile=/home/pi/faulty.pid
User = root
Group = root
Restart = on-failure
RestartSec = 5
TimeoutStartSec = infinity

[Install]
WantedBy = multi-user.target

初期化.py:

import subprocess
# Pretend like there is some initialization here
s = subprocess.run(['su', 'pi', "-c", "python3.9 -u faulty.py"], cwd="/home/pi", text=True)
# faulty.py is located under /home/pi

エラー.py:

import os, time
with open("faulty.pid", "w") as f:
    f.write(str(os.getpid()))
print("AAAAAAAAAAAAAA")
time.sleep(60)
raise NameError("Boom")

私が経験している問題は、以下を使用してfailed.pyの出力を見ることができないことです。systemctl 状態テストまたはJournalctl -uテスト。しかし、私はできるシステムログで見つけます。私も単純ではなく型分岐を試しましたが、役に立ちませんでした。また、手動で初期化.pyを実行すると、欠陥のある.pyの出力が端末に表示されます。
変える

s = subprocess.run(['su', 'pi', "-c", "python3.9 -u faulty.py"], cwd="/home/pi", text=True)

そして

s = subprocess.run(["python3.9", "-u", "faulty.py"], cwd="/home/pi", text=True)

また、予想されるログを生成します。
修正する:

s = subprocess.run("sudo -u pi bash -c 'python3.9 -u faulty.py'", cwd='/home/pi', text=True, shell=True)

返品働くそして、ユーザーを変更します。 (だからsudoが良いと思います)
Journalctl log(case forked):

Aug 03 12:35:42 raspberrypi systemd[1]: Starting testtesttest...
Aug 03 12:35:42 raspberrypi su[52929]: (to pi) root on none
Aug 03 12:35:42 raspberrypi su[52929]: pam_unix(su:session): session opened for user pi(uid=1000) by (uid=0)
Aug 03 12:36:43 raspberrypi systemd[1]: test.service: New main PID 52947 does not exist or is a zombie.
Aug 03 12:36:43 raspberrypi systemd[1]: test.service: Failed with result 'protocol'.
Aug 03 12:36:43 raspberrypi systemd[1]: Failed to start testtesttest.
Aug 03 12:36:48 raspberrypi systemd[1]: test.service: Scheduled restart job, restart counter is at 1.
Aug 03 12:36:48 raspberrypi systemd[1]: Stopped testtesttest.

Journalctlログ(簡単なケース):

Aug 03 12:42:29 raspberrypi systemd[1]: Started testtesttest.
Aug 03 12:42:29 raspberrypi su[53443]: (to pi) root on none
Aug 03 12:42:29 raspberrypi su[53443]: pam_unix(su:session): session opened for user pi(uid=1000) by (uid=0)
Aug 03 12:43:29 raspberrypi systemd[1]: test.service: Succeeded.

ベストアンサー1

おすすめ記事