Existe-t-il un moyen de faire en sorte qu'une session «Screen» survive au redémarrage?

25

J'utilise l' utilitaire Screen et je souhaite conserver la session lorsque la machine redémarre. Si ce n'est pas possible, vous pouvez recommander d'autres alternatives à Screen qui permettraient de préserver les sessions entre les redémarrages.

J'utilise Ubuntu Server 10.04 (Lucid Lynx) si cela est important.

J'ai ouvert plusieurs sessions via Screen. Lorsque la machine redémarre, toutes ces sessions sont perdues et je dois les rouvrir à nouveau. Je voulais trouver un moyen de préserver ces sessions Screen.

Sergey G
la source
qu'essayez-vous de faire? voulez-vous conserver l'historique ou tout ce qui se passe dans votre session écran?
Marcel G
1
Est-ce que cela ne ferait pas échouer le but du redémarrage?
Brian Knoblauch
qu'entendez-vous par «séances»? Voulez-vous dire que vous avez des connexions ssh à d'autres hôtes dans plusieurs fenêtres d'écran? Si c'est ce que vous voulez dire, alors écrire un fichier .screenrc et spécifier l'utilisateur @ host que vous souhaitez slogin devrait faire l'affaire ..., si vous avez activé les connexions sans mot de passe ssh. Ensuite, lorsque vous démarrez l'écran, toutes les connexions ssh démarrent automatiquement. Vous pouvez même le démarrer à partir de rc.local (un peu délicat, car vous devez le démarrer à partir de votre nom d'utilisateur), donc lorsque vous vous connectez, vous pouvez rattacher la session d'écran en cours.
natxo asenjo
1
plus important encore, pourquoi redémarrez-vous tout le temps? Les serveurs Unix ne sont pas des serveurs Windows, ils sont conçus pour des temps élevés, les machines sont connues pour avoir des temps de fonctionnement de plusieurs années (sans correctifs de sécurité du noyau). Si vous redémarrez en raison de correctifs de sécurité du noyau, jetez un œil à quelque chose comme ksplice.
The Unix Janitor

Réponses:

16

Tout d'abord, clarifions quelques points importants:

  1. Combien de machines sont impliquées? En d'autres termes, vous connectez-vous à une machine distante ou tout est sur votre machine locale?
  2. Si une machine distante est impliquée, quelle machine redémarre: est-ce le serveur ou le client?

Si une machine est impliquée ou si le serveur est en cours de redémarrage, vous n'avez généralement pas de chance.

Si vous vous connectez à une machine distante, mais que vous devez redémarrer votre machine locale, cela ne pose aucun problème tant que vous exécutez l'écran sur la machine distante au lieu de votre machine locale. Je sais que cela est assez évident pour tout utilisateur d'écran expérimenté (même légèrement expérimenté), mais je le mentionne juste au cas où cela pourrait être utile.

Encore une autre possibilité (encore une fois, si cela vous est utile dépend de votre situation) est d'exécuter la machine avec écran sur une machine virtuelle. Supposons qu'il s'agisse d'un serveur physique distant et qu'il doit être redémarré, mais qu'il dispose d'un système d'exploitation invité sur (par exemple) VMware. Vous pouvez suspendre le système d'exploitation invité et le redémarrer après le redémarrage du matériel. Tout dépend de la raison pour laquelle vous devez redémarrer, ce qui n'a pas été spécifié, du degré de contrôle que vous avez sur la machine et de votre volonté à vous lancer dans tous ces problèmes.

Il n'y a pas de solution FACILE et il est possible qu'aucune des solutions ne fonctionne pour vous. Mais bonne chance.

Si vous vous connectez à de nombreuses machines, il peut sembler trop difficile d'exécuter l'écran séparément sur toutes les machines distantes, et c'est le cas. Dans ce cas, il est utile d'avoir une machine intermédiaire exécutant l'écran, qui peut avoir de nombreuses fenêtres d'écran, chacune étant connectée à une autre machine distante. Tant que la machine intermédiaire reste en place, vous pouvez redémarrer votre propre machine locale (ou l'emballer dans votre sac et la ramener à la maison pour la nuit, ou autre) et l'écran continue de fonctionner sur la machine intermédiaire. (Et évidemment, si l'une des machines distantes tombe en panne, vous perdez la connexion à cette machine, mais le reste de vos sessions d'écran va bien.)

Mais selon toute vraisemblance, vous faites référence à la machine distante ou à la seule machine à redémarrer, auquel cas il n'y a pas de moyen simple de le faire. CryoPID semble prometteur au début, mais son site Web indique qu'il ne fonctionne pas pour l'écran.

Mais il existe une autre option quelque peu prometteuse qui mérite d'être explorée. (Si cela fonctionnera pour vous dépend dans une large mesure exactement de ce que vous essayez de faire.) Vérifiez cela sur github.com: https://github.com/skoneka/screen-session/tree/master/ScreenSession/

iconoclaste
la source
+1 pour cryoPID, je n'en savais rien!
The Unix Janitor
ScreenSession semble intéressant, d'après la description de celui-ci, c'est exactement ce que je voulais
Sergey G
5

Dans de rares circonstances, cela est possible (voir CryoPID ou CryoPID2 ), mais en général, cela est difficile et ne peut donc pas être fait.

pjz
la source
Le lien est rompu.
kasperd
4

Au lieu d'utiliser l'écran, utilisez une petite machine virtuelle Virtualbox et travaillez à l'intérieur. Ensuite, vous pouvez simplement l'hiberner, redémarrer l'hôte, puis réactiver la machine virtuelle (tout comme la fermeture et la réouverture du couvercle d'un ordinateur portable). Les connexions SSH à des hôtes distants ne persisteront probablement pas par cette méthode, je ne pense pas qu'il serait possible de garantir cela.

Gaius
la source
En fait, je voudrais mettre à jour ma réponse à tmux-resurrect
Gaius
tmux-resurrect ressemble à une très bonne solution.
serv-inc
4

Vous ne pouvez pas. Certainement pas sur la même machine

Crankyadmin
la source
Que signifie «non peut faire» ?
Peter Mortensen
1

Dans tout cela, Screen lui-même est assez marginal. Ce n'est pas l'écran que vous voulez «sauvegarder», n'est-ce pas?, Mais les environnements au sein des différentes sessions d'écran, quels qu'ils soient.

Vous semblez suggérer que l'enregistrement d'une session Screen couvrirait un processus SSH à l'intérieur et toutes sortes. Ce qui fonctionne à l'intérieur de Screen n'est pas du tout l'affaire de Screen, et ce sont des choses qui seraient difficiles à "sauvegarder" ... quoi que cela signifierait vraiment si elles étaient implémentables.

Chris Phillips
la source