나중에 연결할 수 있도록 부팅 시 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 항목에서 스크립트를 호출할 수 있습니다.