24

我花了两天时间试图理解为什么我不能让 cron 在我的 Ubuntu EC2 实例上工作。我已阅读文档。任何人都可以帮忙吗?我想要的只是获得一个有效的cronjob。

我正在使用一个简单的 wget 命令来测试 cron。我已经验证这可以从命令行手动工作:

/usr/bin/wget -O /home/ubuntu/backups/testfile http://www.nytimes.com/

我的 crontab 文件如下所示:

02 * * * * /usr/bin/wget -O /home/ubuntu/backups/testfile http://www.nytimes.com/

我在命令之间有一个空格,并且命令下方有一个空行。我也尝试从系统级别执行此命令sudo crontab -e。它仍然不起作用。

cron 守护进程正在运行:

ps aux | grep crond                                                                                                                   
ubuntu    2526  0.0  0.1   8096   928 pts/4    S+   10:37   0:00 grep crond

cronjob 似乎正在运行:

$ crontab -l
02 * * * * /usr/bin/wget -O /home/ubuntu/backups/testfile http://www.nytimes.com/

有没有人有任何建议或可能的解决方案?

谢谢你的时间。

4

8 回答 8

42

Cron 可以像在任何其他 linux 服务器中一样在基于 Amazon 的 linux 服务器中运行。

  1. 使用 SSH 登录到控制台。
  2. crontab -e在命令行上运行。
  3. 您现在位于当前用户的 crontab 的 vi 编辑器中(默认情况下是控制台用户,具有 root 权限)
  4. 要测试 cron,请添加以下行:* * * * * /usr/bin/uptime > /tmp/uptime
  5. 现在保存文件并退出 vi(按 Esc 并输入 :wq)。
  6. 一两分钟后,检查是否在 /tmp ( ) 中创建了正常运行时间文件cat /tmp/uptime
  7. uptime通过在命令行上键入命令将其与当前系统正常运行时间进行比较。

上面的场景在安装了 Amazon Linux O/S 的服务器上成功运行,但它也应该在其他 linux 机器上运行。这会修改当前用户的 crontab,而无需触及系统的 crontab,并且不需要 crontab 条目中的用户,因为您是在自己的用户下运行的。更简单,更安全!

于 2013-06-07T14:23:54.983 回答
26

您的 cron 守护程序没有运行。当您运行时ps aux | grep crond,结果显示只有 grep 命令正在运行。每次运行时都要注意这一点ps aux | grep blah

通过运行此命令检查 cron 服务的状态。

尝试:

sudo service crond status

此处的其他信息:http ://www.cyberciti.biz/faq/howto-linux-unix-start-restart-cron/ 。

于 2012-07-16T08:14:10.430 回答
13

在某些 AWS Ubuntu EC2 机器上,无法通过使用crontab -e或什至sudo crontab -e(无论出于何种原因)来编辑或运行 cron 作业。我能够通过以下方式获得 cron 工作:

  1. touch /home/ubuntu/crontest.log创建日志文件
  2. sudo vim /etc/crontab编辑系统范围的 crontab
  3. 使用 root 用户在倒数第二行添加您自己的 cron 作业,例如* * * * * root date && echo 'It works!'>> /home/ubuntu/crontest.log 2>&1将 stdout 和 stderr 转储到您在步骤 1 中创建的日志文件中
  4. 通过等待 1 分钟然后cat /home/ubuntu/crontest.log查看 cron 作业的输出来验证它是否正常工作
于 2019-04-02T16:09:15.870 回答
3

不要忘记指定运行它的用户。尝试在您的/etc/cron.d文件夹中创建一个以您想要做的事情命名的新文件getnytimes,并将该文件的内容设为:

02 * * * * root /usr/bin/wget -O /home/ubuntu/backups/testfile http://www.nytimes.com/

于 2012-05-06T16:32:43.680 回答
2

就我而言,cron 作业正在运行,但它正在运行的脚本失败。失败的原因是因为我在脚本内的包含行中使用了相对路径而不是绝对路径。

于 2016-08-06T08:54:32.057 回答
1

对我来说诀窍是什么

  1. 确保 crontab 处于活动状态:
    sudo service crond status
  1. 通过运行重新启动 crontab:
    sudo service crond restart
  1. 像往常一样重新安排 cron 作业:
    crontab -e
于 2020-12-15T19:07:00.443 回答
0

cronjob 未运行的可能原因之一:确保服务器时间和您的 cronjob 时间相同。为此,我浪费了很多时间。

于 2018-09-10T20:45:43.143 回答
0

跑步

/usr/bin/wget -O /home/ubuntu/backups/testfile http://www.nytimes.com/

给我一个错误

/home/ubuntu/backups/testfile: No such file or directory

这是你的问题吗?我猜 cron 不会将此错误写入任何您可以将 stderr 重定向到 stdout 并看到如下错误的地方:

02 * * * * /usr/bin/wget -O /home/ubuntu/backups/testfile http://www.nytimes.com/ > /home/ubuntu/error.log 2&>1 
于 2015-08-23T15:21:55.193 回答