1 votes

Processus tué lors de la déconnexion ssh malgré l'écran/nohup

Je suis confronté à une situation plutôt étrange :

  • ssh à un beaglebone (détails : uname -a = "Linux beaglebone 3.2.34 #1 Wed Nov 21 14:17:11 CET 2012 armv7l GNU/Linux", serveur ssh : Dropbear sshd v2012.55)
  • lancer n'importe quel type de processus via screen, ou nohup ou /etc/init.d/.
  • déconnexion
  • se connecter à nouveau
  • observez que le processus n'est plus là..

En utilisant une deuxième connexion ssh, je peux observer que le processus lancé est tué lors de la déconnexion.

J'ai vu des messages comme Qu'est-ce qui détermine exactement si un travail en arrière-plan est tué lorsque le Shell est quitté, ou tué ? mais je n'arrive toujours pas à comprendre ce comportement, qui n'est clairement pas la voie à suivre. screen et d'autres processus désavoués sont censés fonctionner.

$ shopt huponexit
huponexit       off

J'ai dû recourir à des commandes cron pour maintenir le processus.

Pourquoi les processus détachés sont-ils tués lors de la déconnexion ?

Voyez-vous d'autres choses à rechercher ?

0voto

MariusMatutiae Points 45233

Il semble étrange que le nohup ne fonctionne pas, mais cela peut facilement être mis à l'épreuve, comme suit :

  { sleep 999; echo $? > exitcode ; } &
  fuser -1 -k /bin/sleep
  expr $(cat exitcode) - 128

Cela imprimera le code de retour moins 128, qui est exactement le numéro du signal qui l'a tué. Vous pouvez les lister simplement en faisant :

  kill -l 

Maintenant, essayez ceci à la place :

  rm exitcode
  { nohup sleep 999; echo $? > exitcode; } &
  fuser -1 -k /bin/sleep
  ls -l exitcode

Si nohup fonctionne, à ce stade, on vous dira qu'il n'y a pas de tel fichier. Vous pouvez vérifier cela en faisant :

  fuser -15 -k /bin/sleep
  expr $(cat exitcode) -128

et que cette valeur est de 15.

EDIT

Votre dernier commentaire était assez révélateur : cela signifie que le SIGHUP n'est pas envoyé au processus (sleep, dans ce cas) mais directement à votre Shell. Ceci ne peut être fait que par Dropberar, bien sûr. Une petite recherche a montré que Dropbear tue effectivement tous les processus utilisateur à la déconnexion.

Vous pouvez désactiver cette fonctionnalité gênante en ajoutant la ligne

 KillMode=process

à la fin de la strophe Service dans le fichier /lib/systemd/dropbear@.service. Ensuite, redémarrez ou redémarrez Dropbear.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X