Оригинальная версия:
Как запустить sudo sh -c "command" на заднем плане
В терминале
sudo sh -c "команда" & запускается в фоновом режиме, но как только я нажимаю enter, процесс завершается
[test@localhost app]$ sudo sh -c 'app start' &
[3] 31725
[test@locahost app]$
[3]+ Stopped sudo sh -c 'app start'
Перепишите:
Я хочу запустить some long-running command
в фоновом режиме, как root.
«Очевидный» способ сделать это
sudo some long-running command &
По неуказанным причинам я тоже пытался
sudo sh -c 'some long-running command' &
Обе эти ошибки завершаются одинаково: я получаю приглашение оболочки, но затем, как только я нажимаю Enter, я получаю сообщение об ошибке:
$ sudo sh -c 'some long-running command' & [3] 31725 $ [3]+ Stopped sudo sh -c 'some long-running command' $
Мне было указано, что когда я помещаю команду sudo
в фоновый режим, она теряет доступ к стандартному вводу.
Поэтому он не может прочитать пароль и останавливается при попытке.
Другой подход - использовать опцию -b
чтобы указать sudo
перевести long-running command
в фоновый режим, а не sudo
в фоновый:
sudo -b some long-running command
или же
sudo -b sh -c 'some long-running command'
Ой! Я почти забыл упомянуть! Мои требования включают
- Должен быть в состоянии перенаправить вывод
long-running command
в файл. - Должен иметь возможность фиксировать состояние завершения
long-running command
, предположительно записывая ее в файл. - Должно быть в состоянии получить PID фонового процесса в каком - то надежном способе (без необходимости
grep
через выходps
Как я могу это сделать?