启动时在 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

手动执行时效果很好。然后我创建了一个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 命令放在执行开始=,但是启动服务失败并显示相同的错误消息(只是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 条目上调用脚本。

相关内容