Systemdエントリの作成

Systemdエントリの作成

私はPythonスクリプトを使用してデータを収集するロガーを実行しています。現在、tmuxを使用してSSHトンネルを分離して閉じることができます。システム起動時に起動したい。

私はフォローしましたこのレシピ厳密に言えば、サンプルのPythonスクリプトを挿入するのではなく、私のスクリプトを挿入しただけです。その他はスクリプトやディレクトリ名などまで正確に従います。

レシピは次のとおりです(外部参照が失われる可能性があるため)。

Systemdエントリの作成

sudo nano /etc/systemd/system/myapp.service
[Unit]
# After=network.service
Description=My App

[Service]
Type=simple
# WorkingDirectory=/code/python/myapp
ExecStart=/code/scripts/myapp.sh
# User=do-user

[Install]
WantedBy=multi-user.target
# WantedBy=default.target

Bashスクリプトの作成

nano /code/scripts/myapp.sh
#!/bin/bash

# cd /code/python/myapp python3 /code/python/myapp/run.py >> /code/logs/myapp.log 2>&1 mkdir /code/logs

Pythonスクリプトの作成

nano /code/python/myapp/run.py
import signal import time import datetime

is_shutdown = False

def stop(sig, frame):   print(f"SIGTERM at {datetime.datetime.now()}") global is_shutdown   is_shutdown = True

def ignore(sig, frsma):   print(f"SIGHUP at {datetime.datetime.now()}")

signal.signal(signal.SIGTERM, stop) signal.signal(signal.SIGHUP, ignore)

print(f"START at {datetime.datetime.now()}")

while not is_shutdown:   print('.', end='', flush=True)   time.sleep(1)

print(f"END at {datetime.datetime.now()}")

テストシステム

ファイル権限の設定

sudo chmod 744 /code/scripts/myapp.sh
sudo chmod 664 /etc/systemd/system/myapp.service

サービスの有効化

sudo systemctl daemon-reload
sudo systemctl enable myapp.service

テストサービス

sudo systemctl start myapp.service

状態確認

sudo systemctl start status.service

ログの確認

tail -f /code/logs/myapp.log

ただし、サービスを開始しようとすると、次のエラーが発生します。

$ sudo chmod 744 /code/scripts/myapp.sh
$ sudo chmod 664 /etc/systemd/system/myapp.service
$ sudo systemctl daemon-reload
$ sudo systemctl enable myapp.service
$ sudo systemctl start myapp.service
$ sudo systemctl start status.service
Failed to start status.service: Unit status.service not found.
$ tail -f /code/logs/myapp.log
...

のログは/code/logs/myapp.log空です。以前の試みでは、ログにモジュールのインポートエラーが含まれていました。スクリプトを少し変更しましたが、その後もログはまだ空です。

ロガーを実行しているエッジデバイスで使用されているOSは次のとおりです。

Ubuntu 18.04.5 LTS(GNU/Linux 4.15.0-147-typ x86_64)

私が間違っていることを知っていますか?

関連情報