Exécuter un processus persistant via ssh
Je suis en train de commencer un test serveur via ssh, mais il meurt toujours, une fois que je me déconnecte de ssh.
Est-il un moyen de démarrer un processus (exécuter le serveur) afin de ne pas mourir à la fin de ma session ssh?
source d'informationauteur 9-bits
Vous devez vous connecter pour publier un commentaire.
Comme une alternative à
nohup
vous pouvez exécuter votre application à distance à l'intérieur d'un multiplexeur de terminal, comme GNUécran
outmux
.À l'aide de ces outils, il est facile de se reconnecter à une session à partir d'un autre hôte, ce qui signifie que vous pouvez lancer un programme de renforcement ou de télécharger à l'arrêt avant de quitter le travail et vérifier son état quand vous arrivez à la maison. Par exemple. Je trouve cela particulièrement utile lorsque vous effectuez des travaux de développement sur des serveurs qui sont très éloignés (dans un autre pays) avec fiabilité de la connectivité entre moi et eux, si la connexion tombe, je peux simplement vous reconnecter et se poursuivre sans perdre n'importe quel état.
Oui; vous pouvez utiliser le
nohup
commande d'avaler de l'HUP ("raccrocher") du signal qui est envoyé à votre programme lorsque vous raccrochez votre session SSH.Alternativement, si vous êtes en train de rédiger le serveur vous-même, vous pouvez coder à enregistrer un gestionnaire pour le signal HUP, et l'avaler à l'intérieur du programme (plutôt que d'utiliser un externe
nohup
programme qui fait la même chose).En plus des autres réponses, vous pouvez commencer votre serveur de test thru lot (ou
at
) mais comme Brian a répondu vous devriez appelerdaemon
Et vous pouvez passer le
-f
option pour sshComme une alternative à
nohup
screen
et al. vous pourriez revoir votre serveur d'invoquerdaemon
pour la détacher du terminal. C'est le idiomatiques façon d'écrire de services pour linux.Voir aussi
démon(3)
.Si vous êtes SSHing à une distro Linux qui a systemd, vous pouvez utiliser
systemd-run
de lancer un processus en arrière-plan (dans systemd termes, "un transitoire de service"). Par exemple, en supposant que vous souhaitez exécuter la commande ping quelque chose dans le fond:La prestation que vous aurez avec systemd au cours de l'exécution d'un processus avec
nohup
est que systemd permettra de suivre le processus et c'est les enfants, garder les logs, n'oubliez pas le code de sortie et de vous autoriser à proprement tuer le processus et de tous les enfants. Exemples:Voir l'état et les dernières lignes de sortie:
Flux de sortie:
Tuer: