У меня есть скрипт инициализации System V, который я разработал, который запускает программу Java. По какой-то причине, когда создается файл PID, он содержит несколько PID вместо одного.Несколько PID хранятся в PID-файле
Вот соответствующий код, который запускает службу и записывает в файл PID:
daemon --pidfile=$pidfile "$JAVA_CMD &" >> $logfile 2>&1
RETVAL=$?
usleep 500000
if [ $RETVAL -eq 0 ]; then
touch "$lock"
PID=$(ps aux | grep -vE 'grep|runuser|bash' | grep <myservice> | awk '{print $2}')
echo $PID > $pidfile
Когда я проверить команду ps aux...
вручную, один возвращается строки. При запуске в качестве скрипта кажется, что этот вызов возвращает несколько PID.
Пример содержимого в PID-файле: 16601 16602 16609 16619 16690
. 16619
- это фактический идентификатор процесса, найденный при ручном запуске команды ps aux...
, упомянутой выше.
Я хотел бы предложить, что вы удалите последнюю команду AWK и проверить, что происходит ... –
Вы заинтересованы только в получении 'pid'. Вместо использования 'ps' используйте' pgrep'. Он возвращает только 'pid'. Попробуйте 'PID = $ (pgrep -f)'. Или возьмите ярлык. Не назначайте '$ PID'. Попробуйте 'pgrep -f > $ pidfile'. –
alvits