我的服务器自 3 月 25 日起就不再运行 cron 作业,尽管它在那天之前就运行过,而且没有任何变化。
操作系统版本是 Ubuntu 8.04LTS。
首先,我重新启动cron
并检查进程。
$ sudo /etc/init.d/cron restart
* Restarting periodic command scheduler crond
...done
$ ps aux | grep cron
root 14893 0.0 0.0 19640 908 ? Ss 14:50 0:00 /usr/sbin/cron
user 16144 0.0 0.0 4972 844 pts/0 R+ 14:50 0:00 grep cron
$ pgrep cron
14893
看起来该cron
进程正在运行,但是当我检查状态时:
$ /etc/init.d/cron status
* Usage: /etc/init.d/cron {start|stop|restart|reload|force-reload}
我想肯定有什么地方出了问题。
我检查了系统日志
$ less /var/log/syslog | grep CRON
Mar 25 07:50:01 mail /USR/SBIN/CRON[12406]: (user) CMD (/home/user/public_html/rails_app/current/script/runner -e production "NewsRelease.send_unnoticed_mails" >> /home/user/public_html/rails_app/current/log/cron.log 2>&1)
Mar 25 07:50:01 mail /USR/SBIN/CRON[12409]: (user) CMD (/home/user/public_html/rails_app/current/script/runner -e production "Link.send_unnoticed_mails" >> /home/user/public_html/rails_app/current/log/cron.log 2>&1)
Apr 7 11:47:19 mail /usr/sbin/cron[13954]: (CRON) INFO (pidfile fd = 3)
Apr 7 11:47:19 mail /usr/sbin/cron[13955]: (CRON) STARTUP (fork ok)
Apr 7 11:47:19 mail /usr/sbin/cron[13955]: (CRON) INFO (Skipping @reboot jobs -- not system startup)
4 月 7 日之后的日志是我cron
手动运行命令时的日志。
因此,cron 自 3 月 25 日起就一直没有运行。
我的 crontab 文件如下。它用于执行 rails 和 ruby 方法。这些作业在 3 月 25 日之前成功运行。
# Begin Whenever generated tasks for: rails_app
PATH=/usr/loca/sbin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
50 7 * * * /home/user/public_html/rails_app/current/script/runner -e production "Link.send_unnoticed_mails" >> /home/user/public_html/rails_app/current/log/cron.log 2>&1
0 5 * * * /home/user/mysql_backup.sh >> /home/user/public_html/rails_app/current/log/cron.log 2>&1
0,15,30,45 * * * * /home/user/public_html/rails_app/current/script/runner -e production "Tweet.post_tweet_at" >> /home/user/public_html/rails_app/current/log/cron.log 2>&1
# End Whenever generated tasks for: rails_app
答案1
如果我没看错,你正在寻找一个临时解决方案,同时让新服务器运行受支持的操作系统。在这种情况下,你可以尝试以下方法
创建一个脚本,运行无限循环来拨打电话,而不是尝试在非常过时的操作系统上修复 cron。类似这样的操作应该可以做到。
#!/bin/bash
while true
do
time=$(date +%H:%M)
hr=$(cut -f1 -d: <<< "$time")
min=$(cut -f2 -d: <<< "$time")
if [ "$hr" == "07"] && [ "$min" == "50" ]; then
#run something at 7:50am
fi
if [ "$hr" == "05" ] && [ "$min" == "00" ]; then
#run something at 5am
fi
if [ "$((min % 15))" == "0" ]; then
#run something every quarter hour
fi
sleep 60
done
当然,还有在启动时运行这个任务。我的 8.04 时代已经过去很久了,我不知道当时什么方法有效。看看这个帖子看看它是否能让你达到你想要的目标。