使用 Bash 脚本添加到 Crontab(如果不存在)
Posted
技术标签:
【中文标题】使用 Bash 脚本添加到 Crontab(如果不存在)【英文标题】:Add To Crontab (if not already exists) Using Bash Script 【发布时间】:2021-12-27 05:32:19 【问题描述】:bash 脚本将作业添加到 crontab 的正确方法是什么,例如
不会有重复的工作 不会使用 crontab 文件 (可选)接近单线遇到了下面这个解决方案,但是不影响运行crontab -l
的输出。
grep 'some_user python /mount/share/script.py' /etc/crontab || echo '*/1 * * * * some_user python /mount/share/script.py' >> /etc/crontab
尝试将其转换为影响crontab -l
,
(crontab -l | grep '/mount/share/script.py') || crontab -l; '*/1 * * * * some_user python /mount/share/script.py >> /root/foo/logs/foo.cron.log 2>&1'; | crontab -
但是运行这个命令会报错:
-bash: */1 * * * * some_user python /mount/share/script.py >> /root/foo/logs/foo.cron.log 2>&1: No such file or directory
【问题讨论】:
【参考方案1】:但是运行这个命令会报错:
-bash: */1 * * * * some_user python /mount/share/script.py >> /root/foo/logs/foo.cron.log 2>&1: No such file or directory
代码:
(crontab -l | grep '/mount/share/script.py') || crontab -l; '*/1 * * * * some_user python /mount/share/script.py >> /root/foo/logs/foo.cron.log 2>&1'; | crontab -
将尝试执行/运行:
'*/1 * * * * some_user python /mount/share/script.py >> /root/foo/logs/foo.cron.log 2>&1'
如果grep
失败。
在其前面添加回显或 printf,因为 crontab
期待来自 stdin
的输入,就像您在第一个示例/代码中所做的那样,类似于:
(crontab -l | grep '/mount/share/script.py') || crontab -l; echo '*/1 * * * * some_user python /mount/share/script.py >> /root/foo/logs/foo.cron.log 2>&1'; | crontab -
这是一个替代方案,它是一个完整的脚本。
#!/usr/bin/env bash
cron_entry=$(crontab -l 2>&1)
is_in_cron='/mount/share/script.py'
new_cron_entry='*/1 * * * * some_user python /mount/share/script.py >> /tmp/foo/logs/foo.cron.log 2>&1'
if [[ $cron_entry != *"$is_in_cron"* ]]; then
printf '%s\n' "$cron_entry" "$new_cron_entry" | crontab -
fi
【讨论】:
以上是关于使用 Bash 脚本添加到 Crontab(如果不存在)的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 crontab 运行运行 Python 脚本的 Bash 脚本