使用tee记录每个异常,以生成重生的bash脚本

时间:2018-05-18 18:10:29

标签: bash

我想执行一个重生的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

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即使失败,脚本也会重生。