起動時にbyobuセッションでPythonスクリプトを実行する

起動時にbyobuセッションでPythonスクリプトを実行する

後で接続できるように、ブート時に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エントリからスクリプトを呼び出すことができます。

関連情報