Получение 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
Ответы
Ответ 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 &