2017-10-16 11 views
0

J'ai un travail crontab qui exécute un script .sh toutes les heures. Ce script navigue (cd ...) dans un répertoire puis lance un programme java (java -jar).Travail Crontab avec timeout

Si je veux m'assurer que le programme Java ne s'exécute pas pendant plus de 30 minutes, où devrais-je définir le délai? Devrait-il être dans le crontab ou dans le script .sh?

+0

S'il n'exécute que Java, pourquoi ne faites-vous pas le timeout dans le Java lui-même? Cela sera utile dans le cas où vous exécuteriez le Java dans un autre contexte ou même O/S. –

Répondre

1

Lorsque vous définissez le délai d'expiration dépend de la situation. Une métrique que je pourrais utiliser serait "Qu'est-ce qui réduirait le plus le fardeau cognitif et de maintenance sur la prochaine personne (qui pourrait être moi dans une année!)?" Parfois, le contexte de la situation dicte d'utiliser un argument pour le programme cronjob, d'autres fois il est préférable d'utiliser timeout. D'autres fois, vous pouvez utiliser ...

Le contexte est important. Qu'est-ce qui a le plus de sens dans votre situation?

+0

C'est un bon point. Permettez-moi de donner des informations plus spécifiques sur le contexte. Fondamentalement, lorsque le travail s'exécute, il lance quelques processus (1 pour la planification crontab, 1 pour le script .sh, 1 pour la JVM). Je veux que tous les processus se terminent après le timeout. Le plus simple pour moi du point de vue de la maintenance est de régler directement le timeout dans la crontab. Comme je ne suis pas sûr de la façon dont la hiérarchie des processus est gérée dans Ubuntu, j'avais peur que le processus de la JVM continue de fonctionner et que seul le script .sh soit tué si je le faisais. –

+0

Optez pour la solution la plus simple et ne mettez à niveau que lorsque vous en avez besoin. Ainsi, j'essaierais 'timeout' et verrais comment cela fonctionne. Sinon, je pourrais envisager de rationaliser certains détails. Par exemple, que fait votre script? S'il configure simplement l'environnement puis appelle la JVM, vous pouvez considérer 'exec' de sorte que le PID de shellscript devienne le PID de la JVM. À ce stade, 'timeout' devrait faire ce que vous voulez. Si c'est plus compliqué que ça, je pourrais configurer votre timeout dans votre shellscript, et tuer tous les processus nécessaires. En bref, "essayez-le, et voyez". – hunteke

+0

Je pense que je vais aller avec mettre le délai d'attente dans le cronjob en tant que tel: délai d'attente 600/bin/sh myscript.sh Et puis dans le script, je vais appeler mon application Java en tant que tel: exec java jar sudo myjarfile.jar. Cela fonctionnerait-il? –