私は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)
私が間違っていることを知っていますか?