Сценарий, вызванный с удаленного сервера, не может правильно запустить службу - PullRequest
0 голосов
/ 11 сентября 2018

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

среди других команд я остановил службу. Команда останова по существу переводит в

ssh -t -t -q ${AEM_USER}@${SERVERIP}   'bash -l -c "service aem stop"'

Служба останавливается, но когда я снова запускаю службу, она просто создает файл .pid и не выполняет запуск. Когда я запускаю команду для запуска, т.е.

ssh -t -t -q ${AEM_USER}@${SERVERIP}   'bash -l -c "service aem start"'

это не показывает никакой ошибки. При входе на сервер и проверке статуса

service aemauthor status

Ниже отображается сообщение

aem dead but pid file exists

Также при запуске службы с помощью входа на сервер она работает, как и ожидалось, вместе с сообщением

Removing stale pidfile (pid: 8701)
Starting aem

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Как уже упоминалось в синдром устаревшего pidfile , существуют разные причины для остановки pid-файлов, например, некоторые проблемы с тем, как вы справляетесь с его удалением, когда процесс завершается ... но учитывая ваш единственный опытпри удаленном запуске я бы предположил, что это может быть связано с тем, что загружается или не загружается вашим профилем ... проверьте наиболее убедительный ответ в посте ниже для некоторых идей:

Как описано в комментариях к упомянутому посту, вы можете попробовать получить /etc/profile или ~/.bash_profile перед выполнением сценария, чтобы протестировать его,или даже пытаясь выполнить env локально и удаленно для сравнения переменных, которые получены или нет.

0 голосов
/ 15 сентября 2018

Мы не знаем подробностей служебного скрипта aem.

Я думаю, проблема связана с сигналом SIGHUP .Когда мы выйдем из оболочки или отключимся от ssh, ОС отправит сигнал HUP всем процессам, запущенным в этой завершенной оболочке.Если процесс не обработал сигнал HUP, он по умолчанию завершится.

Когда мы запускаем команду через ssh удаленно, процесс, запущенный этой командой, получит сигнал HUP после того, как сессия ssh завершена.прекращено.

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

Вы можете попробовать

ssh -t -t -q ${AEM_USER}@${SERVERIP} 'bash -l -c "nohup service aem start"'

Если это работает,Вы можете использовать команду nohup для запуска aem в служебном скрипте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...