Systemd
在啟動時在 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
手動執行時效果很好。然後我創建了一個 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
。