Comment désactiver l'arrêt afin qu'un processus important ne puisse pas être interrompu?

10

Quelle est la manière la plus simple de désactiver ou de suspendre temporairement le redémarrage / arrêt lorsqu'un processus important est en cours d'exécution? Le processus prend trop de temps pour se terminer et ne peut pas être interrompu / repris, donc j'aime éviter d'arrêter le PC pendant qu'il fonctionne. Il est exécuté à partir de cron, donc à moins que je ne vérifie manuellement les processus en cours d'exécution, je ne saurais pas qu'il fonctionne. Merci.

zang3tsu
la source
5
Duplicata possible: SO: Empêche temporairement Linux de s'arrêter , les réponses font allusion aux différents niveaux sur lesquels cela peut être fait, à savoir les scripts shell ou la gestion de l'alimentation de l'environnement de bureau.
sr_
Je ne pense pas que cette réponse soit suffisamment précise sans explication des niveaux d'exécution ni lien vers une explication. Ce n'est pas dans le U&L SE. Puis-je demander quelle distribution et quelle version vous utilisez?
bsd
Plutôt que de modifier la procédure d'arrêt, écrivez un wrapper pour que le travail indique qu'il est terminé, soit par courrier, soit par effleurement de fichier. Testez la fin du travail, puis exécutez l'arrêt. (cron envoie la sortie de ses travaux au propriétaire, mais cela peut être modifié).
bsd

Réponses:

1

Exécutez which shutdownpour voir où se trouve le chemin d'accès au programme d'arrêt. Vous pouvez renommer le fichier, bien que je le déconseille.

Une autre méthode (plus sûre). Utilisez un alias: alias shutdown=' ' quelque chose comme ça est plus réversible. Si vous essayez d'empêcher l'arrêt de tous les utilisateurs, ajoutez l'alias globalement.

Emil
la source
Je pense utiliser un alias, maintenant je dois juste écrire mon script. Merci!
zang3tsu
Qu'en est-il des autres commandes telles que l'arrêt ou la mise hors tension. Auriez-vous besoin de créer des alias / de les renommer également?
mintyfreshpenguin
17

Pour les systèmes plus récents avec systemd, cela a été résolu par systemd-inhibit. Exemple d'utilisation:

systemd-inhibit --why="Doing weekly backup" bash my-backups.sh

Ensuite, si un utilisateur tente de l'arrêter, il ne sera autorisé que s'il est forcé.

❯ systemctl poweroff
Operation inhibited by "bash my-backups.sh" (PID 2414 "systemd-inhibit", user ntrrgc),
reason is "Doing weekly backup".
Please retry operation after closing inhibitors and logging out other users.
Alternatively, ignore inhibitors and users with 'systemctl poweroff -i'.
Alicia
la source
Il y a cependant ce problème: l'exécuter en tant que root de manière non interactive ignorera les verrous. github.com/systemd/systemd/issues/2680
Alicia
Je pense que vous avez mal lu ce rapport de bogue, ils parlent de fonctionner en powerofftant que root non interactif
Ferrybig
Comment ai-je mal lu le rapport de bogue exactement? : S
Alicia
2

Désactivez les commandes "shutdown / reboot / poweroff / halt / hostname" sur les serveurs critiques

chmod 0 /sbin/shutdown

puis si vous avez besoin de l'utiliser, modifiez-le chmod 0755.

danny
la source
1
Qu'en est- il halt, poweroffet systemctl poweroff?
Martin Ueding
1

Je voudrais désactiver la commande dans le fichier / etc / sudoers afin que seul root puisse l'exécuter.

dans / etc / sudoers

# Cmnd alias specification
Cmnd_Alias     SHUTDOWN = /sbin/shutdown

# User privilege specification
root    ALL=(ALL:ALL) ALL
vmule   ALL=(ALL:ALL) ALL, !SHUTDOWN

et quand j'essaye d'exécuter la commande:

vmule@debian:~$ sudo /sbin/shutdown  -r now
Sorry, user vmule is not allowed to execute '/sbin/shutdown -r now' as root on debian.vm
vmule
la source
pouvez-vous élaborer votre réponse? l'arrêt ne peut pas être explicitement spécifié dans / etc / sudoers.
Archemar
Bien sûr, j'ai édité la réponse avec une meilleure explication. Acclamations
vmule
0

Je voulais empêcher un utilisateur local d'arrêter un ordinateur portable lors d'une mise à niveau. La désactivation du périphérique d'entrée était la meilleure solution. Pour moi, il suffisait de désactiver la souris, mais le clavier peut également être désactivé.

Bien sûr, il y a un inconvénient, l'ordinateur ne peut pas être utilisé pendant cette période.

Désactiver l'entrée clavier et souris sous unix (sous X)

Daniel F
la source
-1

shutdownest aussi techniquement une application que vous pouvez supprimer. Courez which shutdown. whichest une commande qui vous montre le chemin d'une application. Dans mon cas, la sortie est /sbin/shutdown. C'est un fichier que vous pouvez simplement faire rm shutdown. Ou si vous souhaitez le désactiver, copiez-le temporairement, changez le nom et supprimez le fichier d'origine.

Vous devez disposer des autorisations suffisantes si vous le souhaitez rm shutdown. Il est en lecture seule, d'où la raison pour laquelle vous pouvez obtenir une erreur. Essayez de le supprimer comme rootou si nécessaire essayez d'utiliser la commande rm shutdown.

William Edwards
la source
3
Pourquoi le -rdrapeau? Vous n'en aurez pas besoin pour un seul fichier, et si vous vous trompez, un désastre s'ensuit.
MadTux