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

34
demandé sur Alex Chen 2013-07-04 20:45:48

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

16
répondu Bandiera 2013-07-04 18:13:27

, 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

43
répondu dusktreader 2013-11-13 22:34:26

Vous devez utiliser sudo en premier, nohup en second.

sudo nohup ./ascii_loader_script.pl 20070502 ctm_20070502.csv &
4
répondu QkiZ 2015-03-17 12:53:54

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.

1
répondu Frederic Leitenberger 2015-02-16 13:56:32

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.

1
répondu DVOPS 2016-10-10 21:18:12

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.

1
répondu Utsav 2018-03-27 12:25:53

Vous pouvez le Définir comme alias:

sudo sh -c 'nohup openvpn /etc/openvpn/client.ovpn 2>&1 > /dev/null &'
0
répondu xiaoping378 2018-03-27 12:24:15

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.

0
répondu diyism 2018-03-27 12:25:16