如何解决将输出添加到从 cron
我看到很多关于从另一个进程获取输出的问题。这个问题是相反的:注入另一个进程的 STDOUT。
我每天有一个 cron 工作(一个 Bash 脚本做 rsync 备份)。在某些情况下,它会运行超过 24 小时。所以第二天,在再次开始备份之前,我的脚本会检查昨天的备份是否仍在运行。如果是,则脚本kill
会在开始之前进行未完成的备份。
我想要的是在杀死它之前在昨天的 cron 作业的输出中添加一行,以便 cron 将与输出一起发送的电子邮件包含一行解释发生了什么。
当我终止我的 cron 作业时,我们收到的电子邮件中的输出以
/bin/sh: line 1: 132887 Terminated /usr/local/bin/backup-to-external
我希望 cron 的电子邮件(也)包含类似内容
Backup was still running. Terminating it before starting it again.
解决方法
如果尚未执行 bash 脚本,您可以更新 cronjob 以执行该脚本。在脚本中,编写一个信号处理程序来输出您的消息并终止您的进程。像下面这样,
#!/usr/bin/env bash
if [[ -f "/path/to/my/binary.pid" ]]; then
already_running_pid=$(cat "/path/to/my/binary.pid")
echo "I'm new ($$). Terminating old."
kill -15 $already_running_pid
wait $already_running_pid
fi
/path/to/your/binary <some args> &
my_binary_pid=$!
echo $$ > /path/to/my/binary.pid
function stop_services() {
kill -9 $my_binary_pid
echo "I'm old ($$). Being Terminated."
}
trap stop_services SIGTERM
wait
rm /path/to/my/binary.pid
你的 cron 应该运行这个 bash 脚本,而不是你的 /path/to/your/binary。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。