无法让 cron 在 Amazon EC2 上工作?
Posted
技术标签:
【中文标题】无法让 cron 在 Amazon EC2 上工作?【英文标题】:Cannot get cron to work on Amazon EC2? 【发布时间】:2012-05-15 09:01:30 【问题描述】:我花了两天时间试图理解为什么我不能让 cron 在我的 Ubuntu EC2 实例上工作。我读过the documentation。任何人都可以帮忙吗?我想要的只是获得一个有效的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/
有没有人有任何建议或可能的解决方案?
感谢您的宝贵时间。
【问题讨论】:
这有帮助吗:***.com/questions/13204/… 我会先尝试一些简单的方法来评估问题是否与您的命令或其他问题有关:即尝试输入:echo "xxx" >> /var/tmp/myfile.txt 并查看是否有问题通过检查 /var/tmp/myfile.txt 运行 和:echo "xxx" > /home/ubuntu/backups/testfile.txt ?如果将文件放入 cron 是否能够创建文件? @maiklos 是的,这也有效。尽管如此,我仍然无法让 crontab 工作。我已经为此工作了好几天了。 【参考方案1】:Cron 可以在基于 Amazon 的 linux 服务器中运行,就像在任何其他 linux 服务器中一样。
-
使用 SSH 登录控制台。
在命令行上运行
crontab -e
。
您现在处于当前用户(默认为控制台用户,具有 root 权限)的 crontab 的 vi 编辑器中
要测试 cron,请添加以下行:* * * * * /usr/bin/uptime > /tmp/uptime
现在保存文件并退出 vi(按 Esc 并输入 :wq)。
一两分钟后,检查是否在 /tmp (cat /tmp/uptime
) 中创建了正常运行时间文件。
通过在命令行中键入uptime
命令将其与当前系统正常运行时间进行比较。
上述方案在安装了 Amazon Linux O/S 的服务器上成功运行,但它也应该在其他 linux 机器上运行。这会修改当前用户的 crontab,而无需触及系统的 crontab,并且不需要 crontab 条目中的用户,因为您是在自己的用户下运行的。更简单、更安全!
【讨论】:
额外提示,重复第6步,一次也可以tail -F /tmp/uptime
(-F
表示可以在文件存在之前开始观看)
技术上 -F 与 --follow=name --retry 相同。前一个选项意味着如果文件被旋转,它可以跟随具有相同文件名的新文件,后者意味着它将继续尝试打开文件直到找到它(即你提到的)。【参考方案2】:
您的 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/。
【讨论】:
遇到了我的 cron 不工作的情况(守护程序正在运行,因为它正在将以下消息输出到日志 -FAILED to authorize user with PAM (Module is unknown)
)。根据这个答案,使用/etc/init.d/crond restart
重新启动守护进程,cron 开始工作。
重启 crond 也为我做了。不知道为什么它首先停止工作。有人知道在哪里看吗? Cron 日志文件没有显示任何有趣的内容。
我也有兴趣找到FAILED to authorize user with PAM (Module is unknown)
的实际解决方案,而不是每次都重新启动 cron。我经常发生这种情况。我只真正使用 cron 进行 logrotate,所以如果驱动器开始装满,我通常做的第一件事就是检查 PAM 错误。我想解决它,这样它就不会再发生了。
应该是 cron 和 d 吗?:sudo service crond start
(默认)AWS ec2 实例将使用 sudo service crond status | start | stop | restart
- 在您链接的文章中也有说明【参考方案3】:
在某些 AWS Ubuntu EC2 机器上,无法使用 crontab -e
甚至 sudo crontab -e
(无论出于何种原因)来编辑或运行 cron 作业。我能够通过以下方式获得 cron 工作:
touch /home/ubuntu/crontest.log
创建日志文件
sudo vim /etc/crontab
编辑系统范围的 crontab
使用 root 用户在倒数第二行添加您自己的 cron 作业,例如 * * * * * root date && echo 'It works!'>> /home/ubuntu/crontest.log 2>&1
,它将 stdout 和 stderr 转储到您在步骤 1 中创建的日志文件中
等待 1 分钟,然后 cat /home/ubuntu/crontest.log
以查看 cron 作业的输出来验证它是否正常工作
【讨论】:
我已确认此方法有效。编辑 /etc/crontab 是我能让 CRON 在 Ubuntu EC2 上接手工作的唯一方法。谢谢@enharmonic。 这也解决了 Amazon Linux 机器的问题! 也适合我。谢谢@enharmonic【参考方案4】:不要忘记指定运行它的用户。尝试在您的 /etc/cron.d
文件夹中创建一个新文件,以您想要执行的操作命名,例如 getnytimes
,并将该文件的内容设为:
02 * * * * root /usr/bin/wget -O /home/ubuntu/backups/testfile http://www.nytimes.com/
【讨论】:
好的,谢谢。创建文件后如何告诉 cron“运行”文件? 看起来 cron 应该在将这个文件放到这里后自动拾取它。不幸的是,它仍然不起作用。 如果您使用“crontab -e”,则该用户不是必需的 - 它会打开 vi 编辑器,您可以在其中编辑当前用户的 crontab。格式与根 cromtab 相同,但没有用户。当我在 vi 编辑器上按 ZZ(或 :wq)时,crontab 开始运行。用于测试其运行的示例 cron 行:“* * * * * /usr/bin/uptime > /tmp/uptime”【参考方案5】:在我的情况下,cron 作业正在运行,但它正在运行的脚本失败。失败的原因是我在脚本内的包含行中使用了相对路径而不是绝对路径。
【讨论】:
【参考方案6】:对我来说诀窍是什么
-
确保 crontab 处于活动状态:
sudo service crond status
-
通过运行重新启动 crontab:
sudo service crond restart
-
照常重新安排 cron 作业:
crontab -e
【讨论】:
【参考方案7】:运行
/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
【讨论】:
【参考方案8】:cronjob 无法运行的可能原因之一: 确保服务器时间和您的 cronjob 时间相同。为此我浪费了很多时间。
【讨论】:
以上是关于无法让 cron 在 Amazon EC2 上工作?的主要内容,如果未能解决你的问题,请参考以下文章
PHP 无法在带有 nginx 和 php-fpm 的 Amazon EC2 服务器上的页面内工作
Red5 媒体服务器:如何让 rtmp 在 Amazon EC2 上运行?