Я искал вокруг, но не вполне нашел то, что я ищу. Вкратце я создал сценарий удара для выполнения в бесконечном цикле с условием продолжения, спя и проверяя, работает ли процесс. Единственная проблема состоит в том, даже если процесс работает, это говорит, что это не и открывает другой экземпляр.
Я знаю, что должен проверить имя процесса и не идентификатор процесса, так как другой процесс мог вскочить и взять идентификатор. Однако все программы жемчуга называют Perl5.10.0 в моей системе, и я предназначаю при наличии нескольких экземпляров той же открытой программы жемчуга.
Следующее, "если" всегда возвращает false, что я делаю неправильно здесь???
while true; do
if [ ps -p $pid ]; then
echo "Program running fine"
sleep 10
else
echo "Program being restarted\n"
perl program_name.pl &
sleep 5
read -r pid < "${filename}_pid.txt"
fi
done