web-dev-qa-db-fra.com

Faire en sorte que Sudo et Nohup travaillent ensemble

Débutant Linux ici.

J'ai un script Perl qui prend deux entrées en ligne de commande. J'ai essayé de l'exécuter en arrière-plan, mais voici ce que j'ai obtenu:

[~user]$ Nohup Sudo ./ascii_loader_script.pl 20070502 ctm_20070502.csv &
[2] 19603
[~user]$ Nohup: appending output to `Nohup.out'

après que le système ait renvoyé "Nohup: ajout de la sortie à` Nohup.out '", aucune nouvelle invite n'apparaîtra. Ensuite, tant que je tape une autre commande, le shell me dira que le processus est arrêté:

[~user]$ Nohup Sudo ./ascii_loader_script.pl 20070502 ctm_20070502.csv &
[2] 19603
[~user]$ Nohup: appending output to `Nohup.out'
ls
ascii_loader_script.pl  format_wrds_trd.txt  Nohup.out  norm_wrds_trd.cfg
[2]+  Stopped                 Nohup Sudo ./ascii_loader_script.pl 20070502 ctm_20070502.csv

J'ai regardé ce post et essayé de faire "Sudo date" avant d'exécuter la commande. Toujours la même chose . http://www.Sudo.ws/pipermail/Sudo-users/2003-July/001648.html

35
Alex Chen

Le problème ici, à mon humble avis, n'est pas Nohup, mais le traitement en arrière-plan de Sudo.

Vous mettez le processus en arrière-plan (& à la fin de la commande), mais Sudo a probablement besoin d'une authentification par mot de passe. C'est pourquoi le processus est arrêté.

Essayez l'une de celles-ci:

1) supprimer la perluète de la fin de la commande, répondre à l'invite de mot de passe et la placer ensuite en arrière-plan (en tapant CTRL-Z - qui arrête le processus et en émettant la commande bg pour l'envoyer en arrière-plan)

2) Modifiez les/etc/sudoers pour ne pas demander le mot de passe des utilisateurs en incluant la ligne: Myusername ALL = (ALL) NOPASSWD: ALL

Si, outre le mot de passe, votre application attend une autre entrée, vous pouvez la diriger de la manière suivante: $ Cat answers.txt | Sudo mycommand.php

hth

17
Bandiera

La solution consiste à utiliser l'indicateur -b pour que Sudo exécute la commande en arrière-plan:

$ Sudo -b ./ascii_loader_script.pl 20070502 ctm_20070502.csv

Vous ne devez utiliser Nohup que si vous souhaitez que le programme continue même après la fermeture de votre session de terminal

45
dusktreader

Vous devez utiliser Sudo en premier, Nohup en second.

Sudo Nohup ./ascii_loader_script.pl 20070502 ctm_20070502.csv &
4
QkiZ

J'ouvre un éditeur et tape ces lignes:

#!/bin/bash
Sudo echo Starting ...
Sudo -b MyProcess

(Où MyProcess correspond à tout ce que je veux exécuter en tant que superutilisateur.)

Ensuite, je sauvegarde le fichier où je le veux sous MyShellScript.sh.

Ensuite, modifiez les autorisations de fichier pour permettre l'exécution . Puis exécutez-le dans un terminal. l'option "-b" indique à Sudo d'exécuter le processus séparément en arrière-plan, de sorte que le processus continue de s'exécuter après la fin de la session de terminal.

Travaillé pour moi sous linux-mint.

1
DVOPS

Tout d’abord, vous devriez permuter Sudo et Nohup.

if Sudo echo Starting ...
then
    Sudo Nohup <yourProcess> &
fi

Le echo Starting ... peut être remplacé par toute commande qui ne fait pas grand chose . Je ne l’utilise que comme commande fictive pour la Sudo.

De ce fait, la Sudo de la condition if déclenche la vérification du mot de passe . Si c'est correct, la session Sudo est connectée et le deuxième appel aboutira, sinon la if échouera et n'exécutera pas la commande réelle.

1
Frederic Leitenberger

Cela devrait marcher 

Sudo -b -u userName ./myScript > logFile

Je suis simplement curieux de comprendre que je peux envoyer ce fichier journal sous forme de courrier électronique une fois que le fichier ./myScript a été exécuté avec succès en arrière-plan.

1
Utsav

Vous pouvez le définir comme votre alias:

Sudo sh -c 'Nohup openvpn /etc/openvpn/client.ovpn 2>&1 > /dev/null &'
0
xiaoping378

Essayer:

xterm -e "Sudo -b Nohup php -S localhost:80 -t /media/malcolm/Workspace/sites &>/dev/null"

Lorsque vous fermez xterm, le serveur Web PHP est toujours actif.
Ne mettez pas Nohup avant Sudo sinon le serveur Web PHP sera tué après la fermeture de xterm.

0
diyism