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

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

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

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

8 ответов


проблема здесь, имхо, не в nohup, а в фоновой обработке sudo.

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

попробуйте один из этих:

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

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

Если помимо ответа пароля ваше приложение ждет другого ввода, то вы можете передать ввод в команду следующим образом: $ cat responses.txt / sudo mycommand.в PHP

hth


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

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

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


вы должны использовать sudo во-первых, nohup во-вторых.

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

прежде всего, вы должны перейти sudo и nohup. А потом:

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

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

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


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

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

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

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

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

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


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

sudo -b -u userName ./myScript > logFile

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


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

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

попробуй:

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

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