crontab 任务未运行

crontab 任务未运行

我尝试创建一个非常简单的 cron 任务,将“Hello World”回显到名为/tmp/example.txt.

从截图中可以看出,我尝试过:

28 23 * * * echo "Hello World" >> /tmp/example.txt

28 23 * * * root /bin/bash echo "Hello World" >> /tmp/example.txt

另外,在屏幕截图中你可以看到日期。我也尝试过获得准确日期在 cron 任务中(例如:28 23 29 11 4),但这也不起作用。

我也尝试使用实际文件

28 23 * * * ./pingstuff

平的东西文件只是 ping 谷歌。我可以运行这个文件并且它可以正确执行。但是,当我尝试在 crontab -e 中使用它时,在预定时间没有任何反应。 (每次尝试后时间都会相应更改。)

我以超级用户身份登录。我有权读取/写入/执行所有这些文件。我不太确定我做错了什么。

在此输入图像描述

答案1

cronjob 可能无法执行,因为

  • cron 守护进程没有运行
  • crontab 中存在语法错误
  • 命令中有语法错误
  • 或者存在权限问题(例如未设置执行位)

要检查守护进程是否正在运行,请尝试service cron statussystemctl status cron(服务管理器取决于您的发行版)。守护进程的名称也可能略有不同,例如crondcronie
如果它没有运行,则启动它(替换statusstart)。

如果它正在运行,请继续检查相关日志文件以查看作业是否实际运行。根据您的发行版,这可能会记录到/var/log/syslog/var/log/messages、特定于守护程序的文件,例如/var/log/cron、 或 systemd 二进制日志文件(journalctl -u cron用于查看)。您应该看到作业的每次执行都有一行。

测试 crontab 时,设置一个执行时间更多的未来一分钟内。一些 cron 实现“预先计划”要运行哪些任务,即它们将在 12:33:00 决定在 12:34:00 运行哪些任务,因此如果您34 12 …在 12 点添加 cronjob,您将错过机会之窗:33:30。

/bin/sh如果作业运行但未产生预期结果,请尝试以同一用户身份使用相同的 shell(通常是简约的)从 crontab 手动运行命令。
一个常见的陷阱(尽管不是这里的情况)是%命令中的字符:它们由 cron 特殊处理,需要转义 ( \%) 才能在实际命令调用中看到。
大多数 cron 实现还将每个 cronjob 的输出(如果有)作为电子邮件发送。如果您尚未通过 Internet 设置邮件传送,则这些邮件应存储在本地并可使用该mail命令读取。

答案2

你最大的问题是这/bin/bash echo "Hello World" 不是一个有效的命令。它寻找一个名为 的脚本echo。尝试/bin/bash -c 'echo "Hello World"'一下。

第二个问题是您应该为 指定绝对路径名pingstuff

引起我注意的第三个问题是它/tmp/example.txt 已经存在(该cat命令没有收到错误消息)。你确定你有写权限吗? (当然,如果您以 root 身份运行,这应该不是问题。)

也可以看看Ubuntu 14.04、16.04、18.04 Cron 作业不执行,尽管它可能不相关。

答案3

有两种 crontab 语法适用于不同的 crontab 文件。第一种形式:

28 23 * * * echo "Hello World" >> /tmp/example.txt

适用于用户 crontab。这些是用 编辑的crontab -e

第二种形式:

28 23 * * * root /bin/bash echo "Hello World" >> /tmp/example.txt

其中具有附加用户列,适用于系统范围的 crontab 文件/etc/crontab。因此,由于您正在使用 编辑 crontab 文件crontab -e,因此不应将用户名指定为第六个字段。  cron会知道以 root 身份运行命令,因为运行时您是 root crontab -e,并且如果您输入“root”作为第六个字段, cron将尝试执行名为 的程序root

但请注意,cron 在 shell 中运行命令。另外,在第二个示例中,您显式启动 shell。您是否在交互式 shell 上尝试过该命令?

$ /bin/bash echo hello
/usr/bin/echo: /usr/bin/echo: cannot execute binary file

为了正确测试,您可能需要使用 Hello World Shell 脚本:

#!/bin/bash
echo 'Hello, world!'

请注意,重定向应该在 crontab 中完成,而不是在脚本中(只是样式指南)。

将其保存helloworld.sh在任何目录中,使其可执行 ( chmod +x helloworld.sh) 并在 crontab 中调用此脚本。如果您使用用户 crontab 或系统范围的 crontab,请务必小心。

因此,用户 crontab () 中的条目crontab -e应如下所示:

28 23 * * * /path/to/helloworld.sh >> /tmp/example.txt

相关内容