繁体   English   中英

通过 bash 脚本将 bash 脚本添加到 crontab

[英]add bash script to crontab via bash script

我想将带有文件名的日期添加到我的 bash 脚本中,该脚本将通过脚本添加到 crontab 文件中。 问题是 crontab 文件中的条目已经附加了日期。 但我的要求是在 crontab 中有 date 命令。

crontab -l > "$FILENAME"
if grep -i cron "$FILENAME"; then
    echo "Cron Job already present in User's crontab file"
else
    echo "*/5 * * * * bash -x /home/cronjob/cron.sh > /home/cronjob/myjob_`date +\%Y\%m\%dT\%H\%M\%S`.log 2>&1 " >> mycron
    crontab mycron
    echo "Crontab added to User's Crontab"
fi

实际的:

*/5 * * * * bash -x /home/cronjob/cron.sh > /home/cronjob/myjob_20211217053830.log 2>&1

要求:

*/5 * * * * bash -x /home/cronjob/cron.sh > /home/cronjob/myjob_`date +%Y%m%d%H%M%S`.log 2>&1

我也尝试添加转义字符,但似乎没有用

看起来您的 crontab 条目已关闭。 由于%是 crontab 文件中的特殊(换行符)字符,因此 escaping 它们应该给出所需的结果:

*/5 * * * * bash -x /home/cronjob/cron.sh > /home/cronjob/myjob_`date +\%Y\%m\%d\%H\%M\%S`.log 2>&1

我证实这在 Ubuntu 中有效。

此外,将SHELL=/bin/bash行添加到 crontab 文件(条目上方)可确保bash解释 crontab 条目。 虽然在这种情况下您可能不需要它,但它会带来更多可能性。

使用猫

cat << '==CRONTAB_LINE==' >> mycron
*/5 * * * * bash -x /home/cronjob/cron.sh > /home/cronjob/myjob_$(date +%Y%m%dT%H%M%S).log 2>&1 
==CRONTAB_LINE==

结果

crontab -e
*/5 * * * * bash -x /home/cronjob/cron.sh > /home/cronjob/myjob_$(date +%Y%m%dT%H%M%S).log 2>&1

要插入命令 output 您必须替换

`date +\%Y\%m\%dT\%H\%M\%S` 

$(date +\%Y\%m\%dT\%H\%M\%S)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM