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
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
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
Vous devez utiliser Sudo en premier, Nohup en second.
Sudo Nohup ./ascii_loader_script.pl 20070502 ctm_20070502.csv &
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.
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.
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.
Vous pouvez le définir comme votre alias:
Sudo sh -c 'Nohup openvpn /etc/openvpn/client.ovpn 2>&1 > /dev/null &'
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.