Crontab ne travaille pas à chaque fois

Mon serveur Linux exécute une application Rails 4 avec Nginx / unicorn.

J’utilise le bijou Whenever pour planifier des tâches. Tout fonctionnait normalement jusqu’à il y a quelques jours lorsque les tâches cron semblent s’être arrêtées.

Ceci est dans mon fichier schedule.rb:

every 5.minutes do runner "Video.send_to_wistia", environment: 'production' end 

C’est ce que je vois quand je lance 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 

J’ai redémarré Licorne. Je me suis aussi assuré de courir:

 whenever --update-crontab myapp 

Dans mon fichier video.rb, qui contient l’action à exécuter, j’ai placé un code de journalisation:

  def self.send_to_wistia logger.debug( "Sending videos to wistia at #{Time.now}" ) ... 

J’ai regardé les journaux et rien n’y apparaît.

PS: Mon premier instinct était que le site fonctionne peut-être en mode développement (que la tâche any n’est pas configurée pour être exécutée), mais cela ne semble pas être le cas, car je vois maintenant des enregistrements dans ma firebase database de production.

Mise à jour: En tant qu’utilisateur de mon application, lorsque service cron status j’obtiens ceci: cron: unrecognized service . Mais je ne suis pas sûr que cela vérifie la crontab de l’utilisateur ou le système.

Update2: C’est ce que je vois quand je lance 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 

Mise à jour 3: j’ai couru ps -ef | grep cron ps -ef | grep cron et je reçois:

 root 1404 1 0 Oct31 ? 00:00:00 crond myappuser 3961 2746 0 10:56 pts/1 00:00:00 grep cron 

Mise à jour 4: J’ai exécuté /bin/bash -l -c 'cd /home/clippo/clippo2 && bin/rails runner -e production '\''Video.send_to_wistia'\''' et /bin/bash -l -c 'cd /home/clippo/clippo2 && bin/rails runner -e production '\''Video.send_to_wistia'\''' ce que je vois:

 /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' 

Ce message d’erreur est vraiment déroutant car ce répertoire existe et a toujours.

Est-ce que ton

crontab -l

la sortie correspond à ce que vous avez dans votre fichier de calendrier pour votre gem à chaque fois?

Je fais d’habitude

chaque fois que -w

chaque fois que je modifie mon fichier horaire et que je souhaite mettre à jour ma crontab.

Bien qu’il semble que vous ayez des problèmes pour obtenir votre fichier rb réel pour exécuter cette commande logger. vous pourriez essayer d’éditer votre schedule.rb pour avoir un set: sortie comme ceci ->

set: output, “/Users/home/rubylogs/vendorcatalog.log”

tous les: jours: à => “2:31 am”

commande “cd / Users / home / automation / Vendor \ Catalog; parallel_test -n 1 * .rb”

fin

Les tests parallèles ne sont pas vraiment pertinents mais vous avez compris. Voyez si vous obtenez une sortie quand vous le faites de cette façon? Cela devrait vous dire si oui ou non il exécute quelque chose.

Cela s’est avéré être une chasse aux oies sauvages. Le cron fonctionnait probablement depuis le début, mais le script lui-même était en erreur (merci à @ Arsen7 de m’avoir orienté dans cette direction), donnant l’apparence qu’il s’était arrêté. Si vous regardez attentivement le message d’erreur sous la mise à jour 4 ci-dessus, vous verrez …

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

J’ai initialement raté le /190 , qui devrait être un nom de fichier (190.MOV). Mais il manquait une extension et semblait être un répertoire qui n’existe pas et qui a provoqué l’échec de tout le script.

En premier lieu, il se peut que votre démon cron ait cessé de fonctionner.

Cela dépend du type de cron installé sur votre système, mais je suppose que la commande pgrep -l cron devrait lister certains processus qui ont “cron” dans ses noms.

Une autre chose pourrait être de vérifier le journal du système – généralement trouvé dans /var/log/messages ou à proximité. Peut-être y a-t-il des lignes avec “cron”? Un grep -i cron /var/log/messages pourrait être utile, mais cela dépend du type de consignateur de système que vous avez – donc le fichier journal pourrait être différent – et à quelle fréquence il est pivoté (vous avez dit que le cron avait cessé de fonctionner). Il ya quelques jours).

METTRE À JOUR

Il semble que votre Crond fonctionne – même s’il y a beaucoup d’exemples, ce qui pourrait ou pourrait ne pas être inhabituel.

Vous pouvez maintenant suivre les conseils de fedorqui et confirmer que la ligne utilisée dans le fichier crontab fonctionne vraiment. Peut-être que ça se bloque, et donc aucune nouvelle invocation du cron n’est créée?

Si la commande fonctionne correctement , vous pouvez voir les fichiers journaux – soit le message du journal système (quelque chose dans le répertoire /var/log ) ou le propre fichier journal du cron (peut-être que votre démon cron est configuré pour sortir – par exemple – /var/log/crond ).

Généralement, le démon cron génère un message de journal chaque fois qu’il exécute une tâche. Il enregistre également lorsque vous voyez ou éditez le fichier crontab. Ces messages peuvent être utiles.

Si vous ne trouvez aucune information dans les fichiers journaux, vous pouvez simplement essayer de redémarrer le service cron. Je ne peux pas vous dire comment le faire, car cela dépend de la configuration de votre serveur.