Как сохранить Perl-скрипт работающим в Unix после выхода из системы?

У меня есть сценарий, выполнение которого занимает много времени.

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

Я пробовал;

at -m -t 03030205 -f /path/to/./thescript.pl

nohup /path/to/./thescript.pl &

И я также проверил, что процессы на самом деле существуют с ps а также at -l в зависимости от того, какой синтаксис планирования я использовал.

Оба эти процесса умирают, когда я выхожу из оболочки. Есть ли способ предотвратить завершение скрипта при закрытии соединения?

У нас здесь есть кроны, они настроены и работают нормально, но я бы хотел использовать at или же nohup для одноразовых скриптов.

Что-то не так с моим синтаксисом? Существуют ли другие методы для достижения желаемого результата?


РЕДАКТИРОВАТЬ:
Я не могу использовать screen или же disown - они не установлены в моей установке HP Unix, и я не могу установить их

5 ответов

Решение

Это всего лишь предположение, но то, что я видел в некоторых версиях ssh и nohup: если вы вошли в систему с помощью ssh, вам может понадобиться перенаправить stdout, stderr и stdin, чтобы избежать зависания сеанса при выходе, (Один из них все еще может быть подключен к терминалу.) Я бы попробовал:

nohup /path/to/./thescript.pl > whatever.stdout 2> whatever.stderr < /dev/null &

(Это больше не относится к моим текущим версиям ssh и nohup - последний перенаправляет их, если обнаруживает, что любой из них подключен к терминалу, - но вы можете использовать разные версии.)

Используйте экран. Он создает терминал, который продолжает работать, когда вы выходите из системы. Когда вы снова войдете в систему, вы сможете вернуться к ней.

Если вы хотите сохранить процесс запущенным после выхода из системы:

disown -h <pid>

полезный встроенный bash В отличие от nohup, Вы можете запустить disown на уже запущенном процессе.

Во-первых, остановите свою работу с помощью control-Z, получите pid от ps (или использовать echo $!), используйте bg чтобы отправить его на задний план, затем используйте disown с флагом -h.

Не забудьте оставить фоновую работу, иначе она будет убита при выходе из системы.

Запустите вашу команду в фоновом режиме.

/path/to/./thescript.pl &

Чтобы получить количество ваших фоновых заданий

   jobs

Теперь вы можете выборочно отказаться от любой из вышеперечисленных задач, с ее идентификатором.

disown <jobid>

Весь процесс отмены должен продолжаться даже после выхода из системы.

Синтаксис nohup выглядит нормально, но ваша учетная запись может не разрешать запуск процессов после выхода из системы. Также попробуйте перенаправить stdout/stderr в файл журнала или /dev/null.

Другие вопросы по тегам