Désactivez tous les services, sauf ssh

31

Comment puis-je désactiver tous les services sauf ssh sur les distributions Linux modernes (basées sur systemd)?

J'ai besoin d'implémenter un mode de maintenance .

Tous ces services doivent être arrêtés:

  • postgres
  • suffixe
  • apache
  • tasses
  • cron
  • pigeonnier

Mais ssh ne doit pas être arrêté, car il est utilisé pour effectuer des tâches pendant le mode de maintenance.

Bien sûr, je pourrais écrire un script shell qui fait une boucle sur une liste de services que je voudrais désactiver. Mais j'ai l'impression de réinventer quelque chose qui existe déjà, mais que je ne connais pas jusqu'à présent.

Guettli
la source
1
Quel type de tâches? Pourquoi en avez-vous besoin?
ewwhite
@ user430214 J'ai mis à jour la question. J'ai ajouté: Bien sûr, je pouvais écrire un script shell qui fait une boucle sur une liste de services que je voudrais désactiver. Mais j'ai l'impression de réinventer quelque chose qui existe déjà, mais que je ne connais pas jusqu'à présent.
guettli

Réponses:

55

Cela ressemble beaucoup à des niveaux d'exécution , remplacés par des cibles dans Systemd. Ainsi, au lieu d'écrire un script qui démarre et arrête une liste de services, vous pouvez créer un nouveau maintenance.targetcontenant uniquement les services nécessaires, comme SSH. Bien sûr, SSH n'est pas très utile sans réseau, donc dans cet exemple un simple emergency-net.targetest modifié pour inclure SSH.

[Unit]
Description=Maintenance Mode with Networking and SSH
Requires=maintenance.target systemd-networkd.service sshd.service
After=maintenance.target systemd-networkd.service sshd.service
AllowIsolate=yes

Ensuite, vous pouvez entrer dans votre mode de maintenance en utilisant

# systemctl isolate maintenance.target

et retour

# systemctl isolate multi-user.target
Esa Jokinen
la source
1
Merci beaucoup pour cette réponse. Cela me montre que demander est utile, même si vous pensez qu'il n'y a pas de bonne réponse à part écrire un script shell sale. Le
fichier
C'est certainement le cas, car il prend également en charge toutes les dépendances, et vous n'avez pas besoin de mettre à jour votre script à chaque fois que vous installez un nouveau service.
Esa Jokinen
3

Commencez par répertorier vos services et recherchez leurs noms système correspondants.

Ensuite, créez une liste et arrêtez chaque membre de la liste pour entrer dans la maintenance, démarrez chaque membre après la maintenance.

Nils
la source
5
Pourquoi ne pas simplement utiliser systemctl isolate?
Chris Down du