我想自动化 cronjob(即通过 shell 脚本安排一项任务)。所以我有一个脚本可以做到这一点
#!/bin/ksh
timestamp=$(date +%H%M%S)
if [ "$timestamp" -eq 230000 ]; then
write to cronjob to execute the same script @ 11:00 PM
fi
所以输出应该如下所示,这可能吗?
00 23 2 10 2 /home/test/run_cron.sh
答案1
您好,欢迎来到 Ask Ubuntu!
crontab
您可以通过以下方式写信至stdin
:
echo '0 23 * * * /home/test/run_cron.sh' | crontab -
缺点是这会清除所有先前的crontab
条目。
如果你必须保留已经存在的条目(而不是从头开始),那么应该这样做:
echo "$(crontab -l ; echo '0 23 * * * /home/test/run_cron.sh')" | crontab -
答案2
我假设您只想被添加到crontab
ONCE。因此必须从crontab
第一个脚本中删除:
#!/bin/ksh
myname="$0"
(crontab -l | grep -E -v "$myname";echo " 0 23 \* \* \* $myname") |\
crontab -
答案3
从评论和你更新的问题中我读到你想运行你的脚本而不是每天晚上 11 点,但第二天晚上 11 点只发送一次。虽然这可以通过以下方式实现,但cron
我建议使用at
工作。
为此添加 cronjob 时,我们需要计算第二天的日期(设置类似于0 23 2 10 * …
10 月 2 日的日期),然后在第二天再次删除该 cronjob。如所述:可能的但很麻烦。因此,这是一项at
工作。您可能需要at
通过 安装命令sudo apt install at
。
的语法at
有点令人惊讶:要运行的命令不是作为参数给出的,而是从标准输入,所以我们需要将其导入at
。以下是一些示例:
echo "ls -l > out1.txt" | at now + 2 minutes
echo "ls -l > out2.txt" | at 23:00
echo "ls -l > out3.txt" | at tomorrow
就你的情况而言:
echo "./test-script.sh" | at 23:00
test-script.sh
这将在下次晚上 11 点时运行。