後で接続できるように、ブート時にbyobu / tmuxセッションでPythonスクリプトを起動し(存在しない場合はセッションを作成します)。
次のコマンドを含むstart_script.shを作成しました。
byobu-tmux new-session -A -s userscript \; rename-window userscript1 \; send-keys "cd /home/username/scripts/ && python userscript1.py" C-m
手動で行うと、うまく機能します。その後、システムサービスファイルを作成しました。
[Unit]
Description=Sensors service
After=multi-user.target
StartLimitIntervalSec=0
[Service]
Type=forking
User=username
ExecStart=/bin/bash /home/username/start_script.sh
RemainAfterExit=yes
[Install]
WantedBy=default.target
ただし、サービスは失敗します。
Jun 21 17:11:39 hostname bash[15061]: open terminal failed: not a terminal
私もstart_scriptコマンドを入れてみました。実行開始=ただし、同じエラーメッセージでサービスの起動が失敗します(ただbyobut-tmux代わりにコマンド名で強く打つ)。
理想的には、Pythonプロセスが失敗したときに自動的に再起動されるようにsystemdがサービスとして処理したいのですが、必須ではありません。
答え1
これはついに私のために働いたものです(Ubuntu 18.04で)。
/home/username/start_script.sh
(このファイルを忘れないでくださいchmod +x
):
#!/bin/bash
set -x
set -e
byobu list-sessions | grep my-app || byobu new-session -d -s my-app
byobu list-windows -t my-app | grep start-script || byobu new-window -t my-app -n 'start-script'
byobu send-keys -t my-app:start-script "cd /home/username/scripts/ && python userscript1.py" C-m
さらに/etc/systemd/system/my-app.start_script.service
:
[Unit]
Description=My app start script
[Service]
Type=forking
ExecStart=/bin/bash -l -c '/home/username/start_script.sh'
User=username
Group=usergroupname
[Install]
WantedBy=multi-user.target
それからインストールしました。ありがとうございますsudo systemctl enable my-app.start_script.service
。
サービスログを表示するには:sudo journalctl -u my-app.start_script.service
。
答え2
スクリプトの最初の行に#/bin/bashがありますか?問題が解決したかどうかはわかりませんが、この方法でExecStartエントリからスクリプトを呼び出すことができます。