Pregunta

Linux newbie here.

I have a perl script which takes two command line inputs. I tried to run it in the background but this is what I got:

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

after the system returns "nohup: appending output to `nohup.out'", no new prompt will appear. Then as long as I type in some other command, the shell will tell me that the process is stopped:

[~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

I've looked at this post and tried to do "sudo date" before executing the command. Still got the same thing. http://www.sudo.ws/pipermail/sudo-users/2003-July/001648.html

¿Fue útil?

Solución 2

The problem here, imho, is not nohup, but background processing sudo.

You are putting the process in background (& at end of command) but probably sudo needs password authentication, and that is why the process stops.

Try one of these:

1) remove the ampersand from end of command, reply to passord prompt and afterwords put it in background (by typing CTRL-Z - which stops the process and issuing the bg command to send it to background)

2) Change the /etc/sudoers to not ask for users password by including the line: myusername ALL=(ALL) NOPASSWD: ALL

If besides the password reply your application waits for other input, then you can pipe the input to the command like this: $ cat responses.txt|sudo mycommand.php

hth

Otros consejos

The solution is to use the -b flag for sudo to run the command in the background:

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

You should only use nohup if you want the program to continue even after you close your current terminal session

You can Try

sudo su

and then

nohup ./ascii_loader_script.pl 20070502 ctm_20070502.csv &

instead of

nohup sudo ./ascii_loader_script.pl 20070502 ctm_20070502.csv &

You must use sudo first, nohup second.

sudo nohup ./ascii_loader_script.pl 20070502 ctm_20070502.csv &

First of all, you should switch sudo and nohup. And then:

if sudo echo Starting ...
then
    sudo nohup <yourProcess> &
fi

The echo Starting ... can be replaced by any command that does not do much. I only use it as dummy command for the sudo.

By this the sudo in the if-condition triggers the password-check. If it is ok then the sudo session is logged in and the second call will succeed, otherwise the if will fail and not execute the actual command.

I open an editor and typed these lines:

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

(Where MyProcess is anything I want to run as superuser.)

Then I save the file where I want it as MyShellScript.sh .

Then change the file permissions to allow execution. Then run it in a terminal. the "-b" option tells sudo to run the process separately in the background, so the process keeps running after the terminal session dies.

Worked for me in linux-mint.

You can set it as your alias:

sudo sh -c 'nohup openvpn /etc/openvpn/client.ovpn 2>&1 > /dev/null &'

This should work

sudo -b -u userName ./myScript > logFile

I am just curious to understand that can I send this logFile as a email after the ./myScript is successful running in background.

My working solution for evaluating disk fragmentation in the background:

  1. Exec sudo with nohup without ampersand (&) at the end:
  $ sudo nohup nice -20 find / -type f -exec filefrag "{}" \; | sed 's/^\(.*\): \([0-9]\+\) extent.*/\2\t\1/'| awk -F ' ' '$1 > 0' | sort -n -r | head -50 > filefrag.txt  
  1. Enter password for sudo;
  2. Press Ctrl+Z;
  3. Put the running process in the background.
$ bg 1
[1]+ sudo nohup nice -20 find / -type f -exec filefrag "{}" \; | sed 's/^\(.*\): \([0-9]\+\) extent.*/\2\t\1/' | awk -F ' ' '$1 > 0' | sort -n -r | head -50 > filefrag.txt &
  1. Now you can exit the terminal and log in later. The process will remain running in the background. Because nohup is used.

Try:

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

When you close xterm, the PHP web server still alive.
Don't put nohup before sudo or else the PHP web server will be killed after closing xterm.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top