crontab 中 date 命令的正确格式

crontab 中 date 命令的正确格式

我尝试使用 /etc/crontab 将当前日期以这种格式输出到文件中。但 crontab 不喜欢这种格式。将 sh 更改为 bash 也无济于事。

我的计划任务:

* * * * * root echo "$(date +%F) - $(date +%T) - no sleep!" >> /home/thomas/1-18-WD/ami

预期输出到文件:2021-05-18 - 03:57:09 - 不睡眠!

它仅当我执行 echo "$(date) - no sleep!" 时才有效,我认为“+”导致了问题。

答案1

通过cron、 或at或运行的作业batch不会在桌面上的同一运行时环境中运行。您的任何PATH更改或其他环境变量设置都不会自动传播到您的cron作业。例如,没有$DISPLAY,因此 GUI 程序需要特殊处理(阅读man xhost)。

cron人们可以在crontab文件 Read中为所有作业设置环境变量man 5 crontab

echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias查看每个环境中的结果 。

由于command该行的一部分crontab默认由 解释/bin/sh,其语法比 更简单/bin/bash,因此我建议command调用一个bash脚本(可执行、已安装、以 7 开头#!/bin/bash)来设置环境,然后调用所需的程序。

答案2

+这里的问题不在于角色,而在于%角色本身,如下所述:

但是你可以简化命令并避免两次调用date 通过echo将文本date直接移动到格式字符串中,即date "+%F - %T - no sleep!"

在 crontab 中,需要这样写:

* * * * * root date "+\%F - \%T - no sleep!" >> /home/thomas/1-18-WD/ami

相关内容