Comment puis-je empêcher l'exécution d'un programme unix dans le fond, même si je me déconnecte?
Je veux lancer un script Perl avec un peu de temps(1) de la boucle à l'arrière-plan sur une machine unix jusqu'à ce que je le tuer.
C'est un ordinateur à distance pour laquelle je n'ai pas d'autorisations administratives (pour une raison, je ne peux pas utiliser Daemon::Générique::While1), je me connecte via SSH, et je veux qu'il continue à s'exécuter après que je me déconnecte.
Une façon que j'ai trouvée est d'écrire quelque chose comme cela pour bash:
nohup ./my_script.pl &
Est-il un autre, plus préférable façon de le faire?
Éditer la crontab est interdit sur l'ordinateur (lors de l'exécution de fond et de longue durée des processus n'est pas).
OriginalL'auteur Karel Bílek | 2009-09-29
Vous devez vous connecter pour publier un commentaire.
Ma méthode de prédilection, et sans doute le plus facile, est à l'aide de
écran
:J'ai trouvé ce sauvetage outil tout récemment. "crible" permet de revenir dans le commandement et le type de choses. Cela fonctionne aussi parfaitement avec SSH.
OriginalL'auteur Yuval Adam
Vous devez fermer stdout, stderr, stdin, sinon vous êtes toujours lié à l'ATS
Cela devrait faire l'affaire.
OriginalL'auteur user224579
Je crois que cela devrait fonctionner à partir de votre script perl.
L'homme, la page de doc pour nohup dit:
OriginalL'auteur Taylor Leese
Extrait est en perldoc perlipc:
Mais je ne suis pas sûr de savoir si setsid de travailler si vous n'êtes pas root. Si pas, essayez de double-fourche après la fermeture de poignées standard.
quelques liens: howto, daemonize
OriginalL'auteur artur-pub
C'est ce que j'utilise pour mon Sendmail programme de filtre et probablement la meilleure façon d'aller. Le module est disponible via CPAN.
Je peux l'avoir installé (j'ai modifié le CPAN pour travailler sans mot de passe root), mais ça me dit quelque chose sur la capacité à écrire dans /var/run
Hmm... j'ai regardé la source et le module lui-même, ne cherche pas à écrire dans /var/run (au moins la version que j'utilise). C'est un joli petit module, de sorte que vous pouvez juste avoir un coup d'oeil et de faire une plus version personnelle avec le minimum de code dont vous avez besoin.
Yep, celui que j'utilise ne le fait pas. Êtes-vous à l'aide de Daemon::Générique ou quelque chose de similaire?
Démon::Générique vais écrire un fichier pid, mais vous pouvez configurer où il écrit. cpan.org/modules/by-module/Daemon/Daemon-Generic-0.61.readme
OriginalL'auteur John Cavan
L'exécution de la tâche dans le fond de la coque est fine, selon la quantité de travail manuel que vous souhaitez mettre en veillant à ce qu'il exécute en continu.
Je voudrais utiliser crontab de l' @reboot (et éventuellement un bilan régulier). Mais ensuite, vous devez prendre en considération le fait que le processus peut être lancé plusieurs fois. La plus simple façon de gérer cela est d'avoir un lock-fichier. Si le fichier est verrouillé, de sortie, d'autre continue à la tâche. N'oubliez pas d'utiliser la non-blocage des contrôles, sinon vous risquez d'accaparer inutile de ressources système et la mort de ces processus.
écran est également une option si elle est disponible.
crontab + écran peuvent être combinés.
Ensuite, vous ne pouvez pas vous assurer que le processus s'exécute en continu (c'est à dire après un redémarrage). l'écran et nohup/le piégeage de la SIGHUP sont toujours valables façons de le faire.
Parole de conseils, demandez à l'administrateur avant de remettre un processus d'arrière-plan sur cette machine. Si vous n'êtes pas autorisé crontab, l'admin peut vous aime pas tourner autour de lui. Peut-être que vous pourrez si vous le demandez gentiment 🙂
etlerant: je l'ai déjà fait, bien sûr, et c'EST ok. 🙂
OriginalL'auteur tommym