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”,您将得到一个空文件输出。