为什么 0 0 * * 1 root hostname >> /tmp/hostname.txt 不能作为 crontab 工作?

为什么 0 0 * * 1 root hostname >> /tmp/hostname.txt 不能作为 crontab 工作?
0 0 * * 1 root hostname >> /tmp/hostname.txt

上面的 cron 条目应该在周一午夜运行,并使用命令的输出创建/tmp一个hostname.txt文件hostname。但它只是创建的一个空白文件。为什么?

答案1

处理 crontab 条目时,区分系统级 cron 非常重要,通常在以下位置之一:

  • /etc/crontab
  • /etc/cron.d/*
  • /etc/cron.daily/*
  • /etc/cron.weekly/*
  • ETC。

或者实际存储在该目录中的用户级别变化/var/spool/cron

$ sudo ls -l /var/spool/cron/
total 0
-rw------- 1 saml root 0 Jun  6 06:43 saml

crontab -e您可以以特定用户身份使用命令访问这些内容。即使 root 也可以拥有这些。

你的问题

您包含的示例是您在创建 的系统级类型时指定的行类型cron。唯一的区别是包含运行该命令的用户。创建某种类型的条目时,这是不必要的,crontab -e因为它是多余的,因为 crontab 条目已指定给创建它的用户。

因此,只需将您的行更改为:

0 0 * * 1 hostname >> /tmp/hostname.txt

解决您的问题。

每日、每周的 cron 是如何工作的?

您通常会在主/etc/crontab文件中看到如下条目:

01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

它们控制相应目录中的脚本何时运行。所以每日的时间是当地时间每天早上 4:20。

因此,如果您想hostname >> /tmp/hostname.txt每天运行该命令,您可以将其放入脚本中,使其可执行,然后将脚本文件放入cron.daily目录中。

/etc/cron.daily/catchhostname.bash

#!/bin/bash

hostname >> /tmp/hostname.txt

每日计划表

# ls -l |grep catch
-rwxr-xr-x 1 root root  118 Feb 28  2013 catchhostname.bash

答案2

假设上面的内容是 root 的 crontab 中的实际行:

0 0 * * 1 root hostname >> /tmp/hostname.txt

此行将运行名为“root”的命令,并向其传递参数“主机名”。如果 /bin 或 /usr/bin(cron 的默认路径)中没有命令名“root”,您将得到一个空文件输出。

相关内容