我的linux服务器正在运行带有Nginx / unicorn的Rails 4应用程序。
我正在使用Whenever gem来安排任务。一切正常,直到几天前cron工作似乎已停止运行。
这是在我的schedule.rb文件中:
every 5.minutes do
runner "Video.send_to_wistia", environment: 'production'
end
这是我在运行crontab -l
时看到的内容:
# Begin Whenever generated tasks for: myapp
0,5,10,15,20,25,30,35,40,45,50,55 * * * * /bin/bash -l -c 'cd /home/myuser/myapp && bin/rails runner -e production '\''Video.send_to_wistia'\'''
# End Whenever generated tasks for: myapp
我重新启动了独角兽。我也确定要跑:
whenever --update-crontab myapp
在我的video.rb文件中,其中包含应该运行的操作,我放置了一些日志代码:
def self.send_to_wistia
logger.debug( "Sending videos to wistia at #{Time.now}" )
...
我一直在看日志,没有任何内容出现。
PS:我的第一直觉是,该网站可能正在开发模式下运行(每当任务未配置为运行时),但似乎并非如此,因为我现在看到记录进入我的生产数据库。 更新
作为我的应用的用户,当我运行service cron status
时,我得到了这个:cron: unrecognized service
。但我不确定这是在检查用户的crontab还是系统范围。
UPDATE2:
这就是我在运行pgrep -l cron
时看到的内容:
410 crond
582 crond
711 crond
879 crond
1021 crond
1188 crond
1320 crond
1404 crond
1509 crond
1648 crond
1805 crond
1829 crond
1936 crond
2090 crond
2196 crond
2235 crond
2388 crond
2491 crond
2523 crond
2673 crond
2773 crond
2907 crond
2971 crond
3068 crond
3195 crond
3256 crond
3386 crond
3496 crond
3554 crond
3686 crond
3839 crond
4041 crond
4137 crond
4375 crond
4453 crond
4657 crond
4753 crond
4991 crond
5036 crond
5287 crond
5335 crond
5609 crond
5620 crond
5891 crond
5918 crond
6186 crond
6203 crond
6468 crond
6501 crond
6781 crond
6786 crond
7080 crond
7084 crond
7368 crond
7375 crond
7658 crond
7667 crond
7964 crond
7965 crond
8246 crond
8559 crond
8647 crond
8841 crond
8932 crond
9136 crond
9232 crond
9444 crond
9515 crond
9745 crond
9813 crond
10097 crond
10100 crond
10395 crond
10539 crond
10680 crond
10975 crond
11029 crond
11260 crond
11325 crond
11559 crond
11629 crond
11855 crond
11936 crond
12153 crond
12246 crond
12438 crond
12739 crond
12756 crond
13038 crond
13085 crond
13337 crond
13380 crond
13622 crond
13663 crond
13920 crond
14017 crond
14205 crond
14301 crond
14503 crond
14596 crond
14788 crond
14939 crond
15086 crond
15260 crond
15382 crond
15542 crond
15680 crond
15953 crond
15963 crond
16253 crond
16263 crond
16547 crond
16548 crond
16839 crond
16846 crond
17130 crond
17134 crond
17416 crond
17430 crond
17711 crond
17715 crond
17993 crond
18013 crond
18288 crond
18298 crond
18570 crond
18596 crond
18865 crond
18892 crond
19147 crond
19190 crond
19453 crond
19475 crond
19735 crond
19773 crond
20030 crond
20058 crond
20313 crond
20356 crond
20608 crond
20641 crond
20890 crond
20939 crond
21185 crond
21224 crond
21467 crond
21522 crond
21762 crond
21807 crond
22044 crond
22105 crond
22339 crond
22401 crond
22621 crond
22699 crond
22927 crond
22984 crond
23209 crond
23283 crond
23504 crond
23568 crond
23786 crond
23866 crond
24081 crond
24151 crond
24363 crond
24449 crond
24658 crond
24734 crond
24940 crond
25032 crond
25235 crond
25317 crond
25517 crond
25617 crond
25812 crond
25913 crond
26095 crond
26211 crond
26401 crond
26496 crond
26683 crond
26794 crond
26978 crond
27079 crond
27260 crond
27377 crond
27555 crond
27662 crond
27837 crond
27960 crond
28132 crond
28245 crond
28414 crond
28543 crond
28709 crond
28828 crond
28991 crond
29127 crond
29296 crond
29423 crond
29546 crond
29721 crond
29841 crond
30014 crond
30136 crond
30322 crond
30418 crond
30733 crond
30767 crond
31015 crond
31071 crond
31314 crond
31358 crond
31596 crond
31692 crond
31892 crond
31983 crond
32174 crond
32283 crond
32469 crond
32568 crond
32751 crond
更新3:
我跑了ps -ef | grep cron
,我得到了:
root 1404 1 0 Oct31 ? 00:00:00 crond
myappuser 3961 2746 0 10:56 pts/1 00:00:00 grep cron
更新4:
我跑了/bin/bash -l -c 'cd /home/clippo/clippo2 && bin/rails runner -e production '\''Video.send_to_wistia'\'''
,这就是我所看到的:
/home/myuser/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/commands/runner.rb:53:in `eval': No such file or directory - /home/myuser/myapp/tmp/video_uploads/190 (Errno::ENOENT)
from /home/myuser/myapp/app/models/video.rb:31:in `new'
此错误消息确实令人困惑,因为该目录已存在且始终存在。
答案 0 :(得分:4)
你的
crontab -l </ p>
输出与您的计划文件中的内容匹配,无论何时宝石?
我经常做
每当-w
每次我更改我的日程安排文件并希望我的crontab更新。
虽然您似乎在获取实际的rb文件以运行该logger命令时遇到问题。你可以尝试编辑你的schedule.rb来设置:这样的输出 - &gt;
set:output,“/ Users / home /rubylogs / vendorcatalog.log”
每天:每天:at =&gt; “凌晨2:31”做
命令“cd / Users / home / automation / Vendor \ Catalog; parallel_test -n 1 * .rb”
端
并行测试的东西并不是真正相关,但你明白了。 当你这样做时,看看你是否得到任何输出?这应该告诉你它是否正在运行。
答案 1 :(得分:2)
原来这是一场疯狂的追逐。 cron可能一直在工作,但脚本本身就错了(感谢@ Arsen7指示我这个方向),给出它停止的外观。如果你仔细查看上面更新4下的错误消息,你会看到......
/home/myuser/myapp/tmp/video_uploads/190
我最初错过了/190
,其中 应该是文件名(190.MOV)。但是它缺少一个扩展并且看起来像一个目录,不存在,导致整个脚本失败。
答案 2 :(得分:1)
作为第一个猜测,可能是您的 cron 守护程序已停止工作。
这取决于你的系统上安装了什么类型的cron,但我想命令pgrep -l cron
应列出一些名称中包含“cron”的进程。
另一件事可能是检查系统日志 - 通常在/var/log/messages
或附近找到。也许有一些带有“cron”的行? grep -i cron /var/log/messages
可能会有所帮助,但这取决于您拥有的系统记录器类型 - 因此日志文件可能不同 - 以及它的轮换频率(您已经说过几天前cron停止工作)。
更新
看起来你的crond正在运行 - 即使它有很多实例,可能是或者可能并不罕见。
现在你可以按照fedorqui的建议,并确认crontab文件中使用的行确实有效。也许它会挂起,因此没有创建新的cron调用?
如果命令正常,您可能希望查看日志文件 - 系统日志消息(/var/log
目录下的内容)或cron自己的日志文件(也许您的cron守护程序是配置为将其消息输出到 - 例如 - /var/log/crond
)。
通常,cron守护程序在运行任务时都会输出日志消息。它还会在您查看或编辑crontab文件时进行记录。这些消息可能很有用。
如果在日志文件中找不到任何信息,那么您可以尝试重新启动cron服务。我无法告诉你如何操作,因为它取决于服务器的配置。