我以为我理解 cron 但看来我不理解。
我在 Red Hat Enterprise Linux v.4 上使用 cron
我们通过将 cron 作业存储在 /etc/cron.d 中来组织它们。它们都归 root 所有。 (在 .cron 文件中的 cron 规范中有根)
当存储在那里时,如果编码正确,作业就会运行。
然而,即使以 root 身份登录
crontab -l
不会在 /etc/cron.d 中列出作业,即使它们实际上正在运行。
我不明白什么?我对此所做的每次网络搜索都告诉我这crontab -l
是要运行的命令。但它并未列出正在运行的所有作业。
更新: 由于不清楚,我的问题确实是
什么命令可以让您查看计划为给定用户运行的所有 cron 作业?
您可以找到许多资料来源说crontab -l
是该命令,但事实显然并非如此。
答案1
如中所述手动的
crontab -l
列出当前用户的 crontab
/var/spool/cron/root
如果你碰巧是root。
crontab -u other -l
对于其他一些用户。编辑 crontab 为
crontab -e
格式为
#.---------------- minute (0 - 59)
#| .------------- hour (0 - 23)
#| | .---------- day of month (1 - 31)
#| | | .------- month (1 - 12) OR jan,feb,mar,apr ...
#| | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
#| | | | |
#* * * * * the command to be executed
0 */2 * * * /every2h.sh
除此之外还有
find /etc/cron* -type f
不建议使用它,因为它用于分发 cron 作业。所有这些文件都以 root 身份运行,并且默认情况下其他用户不可写入。
答案2
根据man crontab
,可以-u
选择附加用户名。
要显示用户的预定作业,用法是:
crontab -l -u username
并且您需要具有超级用户权限才能使用它。如果您不是用户root
,则使用它作为:
sudo crontab -l -u username
并且,根据man crond
和/etc/crontab
,没有命令显示拥有该作业的用户。作业的所有者保存在具有以下结构的文件中:
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
因此,我认为您必须在每个文件中查找用户名或编写 bash 脚本来选择并列出它们。
另外,检查这个问题:/etc/cron.d 和 /var/spool/cron 有什么区别?
答案3
cat /etc/cron.d/*
似乎为部署在那里的那些项目显示了crontab -l
与通过 crontab 部署的那些项目相同类型的列表。