Получение 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.