【问题标题】:Manually running crontab cron.hourly returns missing file error手动运行 crontab cron.hourly 返回丢失文件错误
【发布时间】:2019-11-08 11:59:13
【问题描述】:

我一直在尽力了解 crontab 和 logrotate 是如何协同工作的,我一直在绕圈子。
我已经从 /etc/crontab 中取出了这条线并运行:

$ sudo run-parts --report /etc/cron.hourly
/etc/cron.hourly/logrotate:
run-parts: failed to exec /etc/cron.hourly/logrotate: No such file or directory
run-parts: /etc/cron.hourly/logrotate exited with return code 1

$ run-parts --report /etc/cron.hourly
/etc/cron.hourly/logrotate:
run-parts: failed to exec /etc/cron.hourly/logrotate: No such file or directory
run-parts: /etc/cron.hourly/logrotate exited with return code 1

文件logrotate确实存在于/etc/cron.hourly中:

$ ll /etc/cron.hourly/
total 16
drwxr-xr-x  2 root root 4096 Jun 25 15:43 ./
drwxr-xr-x 94 root root 4096 Jun 26 10:20 ../
-rwxrwxr-x  1 root root   98 Jun 26 13:00 logrotate*
-rw-r--r--  1 root root  102 Feb  9  2013 .placeholder

我认为这就是为什么我最近对每小时轮换日志所做的更改不起作用的原因。

奇怪的是,当我跑步时:

$ sudo run-parts --report /etc/cron.daily

它只是挂起,直到我按 ctrl+c 取消它。

我的 /etc/cron.hourly/logrotate 看起来像这样:

#!/bin/sh
test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate_hourly.conf

如果我运行以下命令:

sudo /usr/sbin/logrotate /etc/logrotate_hourly.conf

然后它会完全按原样旋转日志。

这让我认为上面提到的错误是我的问题。
有没有人有什么想法可以告诉我我错过了什么? 干杯

更新
根据下面的建议,我将 /etc/cron.hours/logrotate 转换为 unix 行尾。
这意味着在终端中手动运行 crontab 命令是可行的。没有错误,并且日志已正确轮换。

但是 crontab 仍然没有自动运行。

【问题讨论】:

  • 当奇怪的事情发生时,首先检查你的系统日志(讽刺的是,在这种情况下)。这个特别奇怪的东西闻起来像一个访问控制问题,在少数可以或将拒绝访问特权进程的事情中,例如通过sudo 以root 身份运行,是强制访问控制。在 Linux 上,这意味着 SELinux,在这种情况下,您的系统日志应该包含有关拒绝访问的 AVC 消息。如果确实发生了这种情况,那么修复它可能就像运行 sudo restorecon -r /etc 一样简单。
  • 第二个猜测:我从问题中复制了您的/etc/cron.hourly/logrotate 并对其进行了字符计数。我得到了 95,而不是您目录列表中报告的 98。您的本地副本中是否有 Windows 行尾?如果是这样,那么dos2unix 命令可以修复它(虽然对于一个三行脚本,手动修复这样的问题应该不会太难)。
  • 我尝试运行tail -f /var/log/syslog,但是当我运行每日 cron 选项卡命令时(它再次以“无文件”失败),系统日志中没有打印任何内容。奇怪的是,我可以看到它每小时打印一次 CRON[2918]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly) 后跟:``` CRON[2917]: (CRON) 信息(未安装 MTA,丢弃输出)``` - 不过我认为它们无关。
  • dos2unix!耶稣为什么我不检查。我一直对基于 unix 的配置文件有奇怪的问题。它刚刚手动运行,没有错误。要去仔细检查一切。干杯@JohnBollinger
  • @JohnBollinger 所以当我手动运行它时它可以工作sudo run-parts --report /etc/cron.hourly。检查了我的日志文件夹,他们已经轮换了。我将 crontab 分钟数(每小时运行时)更改为 48,然后等待。系统日志说它运行了:14:48:01 cron[967]: (*system*) RELOAD (/etc/crontab)。其次是:(root) CMD ( cd / && run-parts --report /etc/cron.hourly)。但它仍然没有运行:S

标签: linux ubuntu cron logrotate


【解决方案1】:

这里的答案是在我的部署过程中,我错过了一个以 Windows 行结尾的文件。在服务器上使用 dos2unix 它修复了所有问题。

跑步:

sudo service cron reload

在编辑“/etc/crontab”后需要 - 我认为我已经阅读了几次这不应该是需要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 2021-05-01
    • 1970-01-01
    • 2020-07-29
    • 1970-01-01
    • 2017-10-14
    • 2016-12-18
    相关资源
    最近更新 更多