2013-11-01 3 views
4

В моем Linux-сервере работает приложение Rails 4 с Nginx/unicorn.Crontab не работает с любого момента 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: Мой первый инстинкт состоял в том, что, возможно, сайт работает в режиме разработки (который всегда не задан для выполнения задачи), но это, похоже, не так, потому что теперь я вижу записи, поступающие в мое производство база данных.

Update: Как пользователь для моего приложения, когда я бегу 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 

Update 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 

Update 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

Ваш демон cron работает? – Arsen7

+0

Вы уверены, что это 'bin/rails'? Разве это не '/ bin/rails'? – fedorqui

+0

@ Arsen7 как я могу проверить это? – emersonthis

ответ

2

Это оказалось дикой гусиной погоней. Cron, вероятно, работал все время, но сценарий сам был ошибкой (спасибо @ Arsen7 за то, что он указал мне в этом направлении), давая вид, что он остановился. Если вы внимательно посмотрите сообщение об ошибке в разделе «Обновление 4» выше, вы увидите ...

/home/myuser/myapp/tmp/video_uploads/190 

Первоначально я пропустил /190, который должен быть имя файла (190.MOV). Но в нем отсутствовало расширение и, как представляется, было каталогом, который существует , а не, и вызвал сбой всего сценария.

+0

Итак, правильным ответом был комментарий от @fedorqui, который спросил, правильно ли работает команда при запуске из оболочки :) – Arsen7

+0

Это правильно. (Но я не могу принять комментарий) – emersonthis

+0

Молодцы! Это была такая проблема исследования :) – fedorqui

1

Как можно догадаться, это может быть так, что ваш cron daemon прекратил работать.

Это зависит от того, какой тип cron установлен в вашей системе, но я думаю, что команда pgrep -l cron должна содержать список процессов, имеющих «cron» в своих именах.

Другое дело - проверить системный журнал - обычно находится в /var/log/messages или поблизости. Может быть, в нем есть строки с «cron»? A grep -i cron /var/log/messages может быть полезным, но это зависит от того, какой у вас системный регистратор - так что файл журнала может быть другим - и как часто он вращается (вы сказали, что cron перестала работать несколько дней назад).

UPDATE

Похоже, что ваш crond работает - даже если у него есть много случаев, что может быть или может быть не необычным.

Теперь вы можете следовать совету fedorqui и подтвердить, что линия, используемая в файле crontab, действительно работает. Может быть, это зависает, и, следовательно, никаких новых призывов к cron не создаются?

Если команда работает правильно, вы можете увидеть лог - либо сообщение системного журнала (что-то под /var/log каталога) или собственный лог-файл хрон в (возможно, ваш демон cron настроен для вывода своих сообщений в - для пример - /var/log/crond).

Обычно демон cron выводит сообщение журнала, когда он запускает задачу. Он также регистрируется, когда вы видите или редактируете файл crontab. Эти сообщения могут быть полезными.

Если вы не нашли никакой информации в лог-файлах, вы можете просто попробовать перезапустить службу cron. Я не могу сказать, как это сделать, потому что это зависит от конфигурации вашего сервера.

+0

Я добавил обновление для результатов 'pgrep -l cron'. Я вижу много вещей, которые говорят «cron». – emersonthis

+0

Спасибо. Я запустил команду вне crontab и получил запутанное сообщение об ошибке (см. Обновление 4 выше). Кроме того, мне кажется подозрительным, что так много корон. Если я знаю ОС, достаточно информации, чтобы узнать, как перезапустить демон cron? – emersonthis

+0

Обычно зная ОС или дистрибутив (если ОС является Linux) может быть достаточно, чтобы найти правильный способ перезапуска службы, но лучше всего спросить системного администратора - он или она является тем, кто создает правила, и в состоянии изменить что-либо от значений по умолчанию. Системный администратор также, вероятно, знает, нормально ли для данной системы иметь так много процессов. – Arsen7

4

ли ваш

кронтаб -l

выходной матч, что у вас есть в вашем файле графика для когда это драгоценный камень?

Я обычно делаю

когда -w

в любое время внести изменения в мой файл расписания и хочу, чтобы мой кронтаб обновляется.

Хотя кажется, что у вас возникают проблемы с получением фактического файла rb для запуска этой команды регистрации. Вы можете попробовать редактирования schedule.rb иметь набор: выход как этот ->

комплект: выход «/Users/home/rubylogs/vendorcatalog.log»

каждый: день: в => "2:31 утра" сделать

команда "CD/Users/главная/автоматизация/Vendor \ Catalog; parallel_test -n 1 * .rb"

конец

параллельный тест материал ISN 're rea но у вас есть смысл. Посмотрите, сможете ли вы получить какой-либо результат, когда вы это сделаете? Это должно сказать вам, работает ли что-то.

Смежные вопросы