Obtenir sudo et nohup à travailler ensemble
Débutant Linux ici.
J'ai un script perl qui prend deux entrées de ligne de commande. J'ai essayé de l'exécuter en arrière-plan, mais c'est ce que j'ai:
[~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 retourne "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 eu la même chose. http://www.sudo.ws/pipermail/sudo-users/2003-July/001648.html
8 réponses
Le problème ici, à mon humble avis, n'est pas nohup, mais le traitement de fond sudo.
Vous mettez le processus en arrière-plan (& à la fin de la commande) mais probablement sudo a besoin d'une authentification par mot de passe, et c'est pourquoi le processus s'arrête.
Essayez l'un de ceux-ci:
1) Supprimez l'Esperluette de la fin de la commande, répondez à l'invite passord et afterwords le mettre 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) Changez le /etc / sudoers pour ne pas demander le mot de passe des utilisateurs en incluant la ligne: myusername ALL = (ALL) NOPASSWD: ALL
Si, outre la réponse du mot de passe, votre application attend une autre entrée, vous pouvez rediriger l'entrée vers la commande comme ceci: $ cat réponses.txt / sudo mycommand.php
Hth
, La solution est d'utiliser l'option-b pour sudo pour exécuter 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 en cours
Vous devez utiliser sudo en premier, nohup en second.
sudo nohup ./ascii_loader_script.pl 20070502 ctm_20070502.csv &
Tout d'Abord, vous devez passer sudo
et nohup
.
Et puis:
if sudo echo Starting ...
then
sudo nohup <yourProcess> &
fi
Le echo Starting ...
peut être remplacé par toute commande qui ne fait pas beaucoup.
Je ne l'utilise que comme commande fictive pour le sudo
.
Par cela, le sudo
dans la condition if déclenche la vérification du mot de passe.
Si c'est ok, alors la session sudo
est connectée et le deuxième appel réussira, sinon le if
échouera et n'exécutera pas la commande réelle.
J'ouvre un éditeur et tapé ces lignes:
#!/bin/bash
sudo echo Starting ...
sudo -b MyProcess
(Où MyProcess {[5] } est tout ce que je veux exécuter en tant que superutilisateur.)
Ensuite, j'enregistre le fichier où je le veux MyShellScript.sh .
Modifiez ensuite les autorisations de fichier pour permettre l'exécution. Ensuite, 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 à s'exécuter après la mort de la session du terminal.
Travaillé pour moi dans linux-mint.
Cela devrait fonctionner
sudo -b -u userName ./myScript > logFile
Je suis juste curieux de comprendre que puis-je envoyer ce fichier journal comme un e-mail après le ./ myScript fonctionne avec succès en arrière-plan.
Vous pouvez le Définir comme alias:
sudo sh -c 'nohup openvpn /etc/openvpn/client.ovpn 2>&1 > /dev/null &'
Essayez:
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.