我对 Linux 还不太熟悉。我最近想学习如何使用 Cron。所以我将以下行写入 crontab 文件,它起作用了:
* * * * * date >> //home/os/system-date.txt
system-date.txt
此行将在每一分钟附加当前日期和时间。
当我在终端中运行以下命令时,时间以特定格式打印:
date +"%H-%M-%S"
例如,23-59-59
被打印。
但是当我想用 Cron 执行此操作时,txt 文件中没有任何内容。具体来说,当我在 crontab 中写入以下行时
* * * * * date +"%H-%M-%S" >> //home/os/system-date.txt
什么都没发生。我不知道为什么。
答案1
您应该使用反斜杠( %
) 来转义条目中的百分号 ( ),如下所示:crontab
\
* * * * * date +"\%H-\%M-\%S" >>/home/os/system-date.txt 2>>/home/os/system-date.err
百分号在crontab
条目中具有特殊含义:它们被解释为换行符。请参阅
crontab(5) 手册页:
“第六个”字段(行的其余部分)指定要运行的命令。行的整个命令部分(直到换行符或
%
字符)将由 文件/bin/sh
的 SHELL 变量中指定的 shell执行。除非使用反斜杠 ( ) 进行转义,否则命令中的crontab
百分号 ( )将更改为换行符,并且第一个百分号之后的所有数据将作为标准输入发送到命令。无法将单个命令行拆分为多行,就像 shell 的尾随“ ”一样。%
\
%
\
crontab
另外,请注意条目中的命令将不会正常情况下,由 执行/bin/bash
。因此,创建一个 Bash 脚本并从 调用该 Bash 脚本始终是一个好习惯crontab
。另一点需要注意的是,PATH
在执行的命令(或脚本)中,环境变量要简单得多crontab
,因此再次使用完整路径名用于在编写的脚本中执行的命令,该脚本将被调用crontab
。
答案2
您可以创建一个简单的脚本文件(即 addDate.sh),例如:
#!/bin/bash
date +"%H-%M-%S" 2>&1 >> //home/os/system-date.txt
将2>&1
错误重定向至指定的输出文件。
并在你的 crontab 中运行这个脚本文件。
* * * * * /myscripts/addDate.sh
/myscripts
您保存脚本文件的路径在哪里。