Systemd

在啟動時在 byobu 會話中啟動 python 腳本

  • September 2, 2019

我想在啟動時在 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

手動執行時效果很好。然後我創建了一個 systemd 服務文件

[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 命令放在ExecStart=之後,但啟動服務失敗並顯示相同的錯誤消息(只是byobu-tmux作為命令名稱而不是bash)。

理想情況下,我希望 systemd 將 python 程序作為服務處理,因此它會在出現故障時自動重啟,但這不是必需的。

這是最終對我有用的東西(在 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

感謝這個答案這個這個提示。

引用自:https://unix.stackexchange.com/questions/526275