9
votes

Comment tester des choses à crontab

Cela permet de me arrive tout le temps: 1) J'écris un script (ruby, shell, etc.). 2) l'exécuter, cela fonctionne. 3) il mis en crontab pour qu'il fonctionne dans quelques minutes, je sais qu'il fonctionne à partir de là. 4) Il ne marche pas, aucune trace d'erreur, de retour à l'étape 2 ou 3 1000 fois

Quand je ruby ​​script échoue dans crontab, je ne peux pas vraiment savoir pourquoi il échoue parce que quand je sortie du tube comme ceci:. P >

ruby script.rb >& /path/to/output


4 commentaires

Où est ruby? Est-ce dans un chemin système tel que / usr / bin? Jetez un oeil à: ubuntuforums.org/showthread.php?t=190671 , et Voyez s'il y a des messages similaires à ce que vous voyez. C'était un cas de rubis étant en dehors du chemin que Cron verrait.


Erreurs (toute sortie réellement) des emplois de mon crontab est envoyé par courrier électronique à moi, le propriétaire du crontab. Ne vous rappelez pas que je devais changer de paramètres pour que cela se produise ... Avez-vous vérifié si vous avez des courriels sur le système que votre cronjob fonctionne?


Que diriez-vous de diriger votre sortie sur le syslog? angruby.blogspot.com/2007/08/Ruby-Aand-syslog. HTML


Notez que "> &" n'est pas SH Syntaxe (c'est CSH). Vous voulez "ruby script.rb> / chemin / vers / sortie 2> & 1" pour rediriger stdout et stardr vers ce fichier. Ou "ruby script.rb 2> & 1 | mailx -s soumis vous@exemple.com"


6 Réponses :


1
votes

Vous pouvez écrire un script wrapper, appelé exemple rbcron , qui ressemble à quelque chose comme: xxx

Cela redirigera l'erreur standard de Ruby à la sortie standard. Ensuite, vous exécutez rbcron dans votre travail cron et la sortie standard contient une sortie + erreur de Ruby, mais aussi les erreurs "Bash" existant de RBCron elle-même. Dans votre entrée cron, rediriger 2> & 1> / chemin / à / sortie Pour obtenir la sortie + des messages d'erreur pour aller sur / chemin / sur ou sur la sortie.


1 commentaires

Changer Var1, etc. et les valeurs à tout ce dont vous avez besoin exporté pour RUBY. Je n'ai pas ces réponses.



1
votes

Si vous voulez vraiment l'exécuter comme vous-même , vous voudrez peut-être appeler Ruby à partir d'un script shell qui sourit votre .profile / . code> etc. De cette façon, ça va tirer dans votre environnement.

Cependant, l'inconvénient est que ce n'est pas isolé de votre environnement, et si vous changez cela, vous pouvez trouver vos emplois cron, arrêtez soudainement de fonctionner.


1 commentaires

Sourcing .Profile / .CASHRC définira les mêmes variables d'environnement que celles qui sont définies à partir de ce fichier, mais ne «manqueront pas d'isoler de votre environnement» en ce qui concerne le processus de fonctionnement, mais vous avez raison - cela crée une dépendance sur un fichier dans votre répertoire personnel.



3
votes

Exécutez une commande 'Set' de l'intérieur du script Ruby, tirez-le de Crontab, et vous verrez exactement ce qui est défini et ce qui n'est pas.


0 commentaires

7
votes

"Y a-t-il un moyen pour moi de faire courir un script comme si je le faisais moi-même de mon terminal?"

oui: xxx

de la page man: xxx


1 commentaires

Grande réponse, c'est le moyen approprié d'exécuter des choses d'un crontab lors de la désignation d'un environnement identique à l'exécution d'une ligne de commande.



2
votes

Pour découvrir l'environnement dans lequel Cron gère les travaux, ajoutez ce travail cron: xxx

ou envoyez la sortie dans un fichier au lieu de courrier électronique.


0 commentaires

6
votes

g'day,

L'un des problèmes de base avec cron est que vous obtenez un environnement minimal défini par Cron. En fait, vous obtenez seulement quatre env. Var's Set et ils sont:

  • Shell - Set sur / bin / sh
  • LOGNAME - défini sur votre utilisateur comme trouvé dans / etc / passwd
  • home - réglez sur votre Dir Accueil. Comme trouvé dans / etc / passwd
  • chemin - réglé sur "/ usr / bin: / bin"

    C'est ça.

    Cependant, ce que vous pouvez faire est de prendre un instantané de l'environnement souhaité et de l'enregistrer dans un fichier.

    Maintenant, faites maintenant votre source de cronjob un script shell trivial qui sourit cette env. fichier puis exécute votre script rubis.

    BTW ayant une source d'emballage un env. Le fichier est un excellent moyen d'appliquer un environnement cohérent pour plusieurs cronjobs. Cela applique également le principe sec, car il vous donne un point pour mettre à jour les choses comme requis, au lieu d'avoir à rechercher un tas de scripts et de rechercher une chaîne spécifique si, par exemple, un emplacement de journalisation est modifié ou une utilité différente est maintenant. être utilisé, par exemple gnutar au lieu de la goudron de vanille.

    En réalité, cette technique est utilisée avec succès avec le singe de construction utilisé pour mettre en œuvre une intégration continue pour un projet logiciel majeur commun à plusieurs grandes compagnies aériennes mondiales. 3,500ksloc étant décédés et construits plusieurs fois par jour et plus de 8 000 tests de régression courent une fois par jour.

    htth

    'Avahappy,


0 commentaires