我想执行一个重生的bash script
,如下所示
until python3 myapp.py; do
echo "$(date) -- every exeception" | tee -a /var/log/app.log
sleep 1;
done
如果它死了,这基本上是respawning the script。
在链接的示例中,它仅记录可能只是数字的$?
。但我希望tee
脚本无法访问log/app.log
文件时发生的异常。
我尝试了不同的东西,但没有任何作用。如何以上述方式记录异常的方向。
until python3 myapp.py; do
echo "$(date) > &2 >&1 | tee -a /var/log/app.log
sleep 1;
done
日志文件输出
Fri May 18 18:09:03 UTC 2018 > 2>&1
Fri May 18 18:09:03 UTC 2018 > 2>&1
Fri May 18 18:09:04 UTC 2018 > 2>&1
Fri May 18 18:09:05 UTC 2018 > 2>&1
Fri May 18 18:09:06 UTC 2018 > 2>&1
Fri May 18 18:09:06 UTC 2018 > 2>&1
Fri May 18 18:09:07 UTC 2018 > 2>&1
Fri May 18 18:09:29 UTC 2018 >&2>&1
Fri May 18 18:09:30 UTC 2018 >&2>&1
Fri May 18 18:09:30 UTC 2018 >&2>&1
Fri May 18 18:09:31 UTC 2018 >&2>&1
Fri May 18 18:09:32 UTC 2018 >&2>&1
Fri May 18 18:09:33 UTC 2018 >&2>&1
答案 0 :(得分:0)
我最终为我的应用程序编写了logging
处理程序,并决定将until
循环用于tmux
会话。会话使用systemd
服务(由@CharlesDuffy提示)
会话创建者bash
脚本:
#!/bin/bash
sleep 1;
/usr/bin/tmux new-session -d -s test
/usr/bin/tmux set-option set-remain-on-exit on
/usr/bin/tmux new-window -d -n 'testpy' -t test:1 'sleep 1; until usr/bin/python3 /home/root/test/test.py; do echo $(date) 2>&1; sleep 1; done'
赋予其可执行权限chmod +x testsess
在systemd
/etc/systemd/system/multi-user.wants/testpy.service
脚本
testpy.service
[Unit]
Description=test service
After=influxdb.service
[Service]
Type=simple
ExecStart=/home/root/test/testsess
ExecStop=/usr/bin/tmux kill-session -t test
RemainAfterExit=true
Restart=on-failure
[Install]
WantedBy=multi-user.target
(这里不是systemd
冠军!但剧本有效)
重新加载守护程序
systemctl daemon-reload
并启动了服务
systemctl start testpy.service
tmux ls
应该在窗口nr中创建test
会话。 1即使失败,脚本也会重生。