Сценарий sh bash неоднозначный pid перенаправления файла с использованием одинарных кавычек
У меня есть следующая новая строка в моем файле.sh
su --session-command='$javaCommandLine & >>$serviceLogFile 2>&1 & echo \$! >$pidFile' $serviceUser || return 1
Когда у меня было это с двойными кавычками, это работало, но pidFile имел неправильный pid, он был выключен одним. Решением исследования было использование одинарных кавычек, и я не могу заставить работать одинарные кавычки.
Теперь я получаю 2 ошибки
bash: $pidFile: неоднозначное перенаправление
bash: $serviceLogFile: неоднозначное перенаправление
Кажется, я не могу использовать переменные или выводить переменные в одинарных кавычках?
Эта строка почти работает, но пид выключен одним
Этот код ниже будет запускаться при загрузке, но pid неверен.
su --session-command="$javaCommandLine & >>$serviceLogFile 2>&1 & echo \$! >$pidFile" $serviceUser || return 1
который должен был заменить этот глючный старый 2-строчный код.
cmd="nohup $javaCommandLine >>$serviceLogFile 2>&1 & echo \$! >$pidFile"
# Don't forget to add -H so the HOME environment variable will be set correctly.
sudo -u $serviceUser -H $SHELL -c "$cmd" || return 1
Старый код работал нормально, но его нельзя было запустить при загрузке.
1 ответ
Идентификатор процесса выключен на единицу, потому что вы добавили дополнительный &
после $javaCommandLine
, Другими словами, вы поместили два процесса в фоновом режиме перед вызовом echo $!
таким образом получая PID >>$serviceLogFile 2>&1
скорее, чем $javaCommandLine
, Эти две части должны быть объединены, как показывают старые 2-строчные коды
su --session-command="$javaCommandLine & >>$serviceLogFile 2>&1 & echo \$! >$pidFile" $serviceUser || return 1
Возможно, вам придется изменить его на -
su --session-command="$javaCommandLine >>$serviceLogFile 2>&1 & echo \$! >$pidFile" $serviceUser || return 1