Подтвердить что ты не робот

Получение sudo и nohup для совместной работы

Linux новичок здесь.

У меня есть perl script, который принимает два ввода командной строки. Я попытался запустить его в фоновом режиме, но это то, что я получил:

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

после того, как система вернет "nohup: добавление вывода в nohup.out", новое приглашение не появится. Затем, пока я ввожу какую-то другую команду, оболочка скажет мне, что процесс остановлен:

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

Я просмотрел этот пост и попытался выполнить "sudo date" перед выполнением команды. Все равно получилось то же самое. http://www.sudo.ws/pipermail/sudo-users/2003-July/001648.html

4b9b3361

Ответ 1

Проблема здесь, imho, не nohup, но фоновая обработка sudo.

Вы помещаете процесс в фоновом режиме (& в конце команды), но, вероятно, sudo нуждается в аутентификации пароля, и поэтому процесс останавливается.

Попробуйте выполнить одно из следующих действий:

1) удалите амперсанд с конца команды, ответьте на приглашение passord, а послесловие поместите его в фоновом режиме (набрав CTRL-Z - который останавливает процесс и выдаёт команду bg, чтобы отправить его на задний план)

2) Измените /etc/sudoers, чтобы не запрашивать пароль пользователей, включая строку: myusername ALL = (ALL) NOPASSWD: ALL

Если помимо ответа на пароль ваше приложение ожидает другого ввода, вы можете передать его команде: $ cat answers.txt | sudo mycommand.php

HTH

Ответ 2

Решение состоит в том, чтобы использовать флаг -b для sudo для запуска команды в фоновом режиме:

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

Вы должны использовать nohup только в том случае, если вы хотите, чтобы программа продолжалась даже после закрытия текущего сеанса терминала.

Ответ 3

Сначала вы должны использовать sudo, nohup second.

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

Ответ 4

Это должно работать

sudo -b -u userName ./myScript > logFile

Мне просто любопытно понять, могу ли я отправить этот файл журнала в виде электронного письма после успешного выполнения. /myScript в фоновом режиме.

Ответ 5

Прежде всего, вы должны переключить sudo и nohup. И затем:

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

echo Starting ... может быть заменен любой командой, которая не делает много. Я использую его только как фиктивную команду для sudo.

При этом sudo в if-условии запускает проверку пароля. Если это нормально, сеанс sudo войдет в систему и второй вызов будет успешным, в противном случае if завершит сбой и не выполнит действительную команду.

Ответ 6

Я открываю редактор и набираю эти строки:

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

(где MyProcess - это что-то, что я хочу использовать как суперпользователь.)

Затем я сохраняю файл, где я хочу его как MyShellScript.sh.

Затем измените разрешения файлов, чтобы разрешить выполнение. Затем запустите его в терминале. параметр "-b" указывает sudo запускать процесс отдельно в фоновом режиме, поэтому процесс продолжает работать после окончания сеанса терминала.

Работал для меня в linux-mint.

Ответ 7

Попробуйте:

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

Когда вы закрываете xterm, веб-сервер PHP остается активным.
Не помещайте nohup перед sudo, иначе веб-сервер PHP будет убит после закрытия xterm.

Ответ 8

Вы можете установить его как псевдоним:

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

Ответ 9

Вы можете попробовать

sudo su

а затем

nohup ./ascii_loader_script.pl 20070502 ctm_20070502.csv &

вместо

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