Мой скрипт не работает должным образом, когда я выполняю использование только sh, он работал нормально до сегодняшнего дня. Даже в cronjob она использовалась для выполнения без проблем.Сценарий не выполняется должным образом при использовании/bin/sh
/bin/sh process_check.sh
Но, кажется, выполнить хорошо, когда я исполню используя следующий путь
./process_check.sh
Script (проверяет, если процесс запущен, выполняет процесс, если он не работает)
#/bin/sh
$service=xxx
if (($(/bin/ps -ef | grep $service | wc -l) > 1))
then
true
else
echo "$service is not running!!!"
/usr/sbin/xxx
fi
Кроме того, любые способы сделать это намного эффективнее? У меня есть скомпилированная программа, которую я пытаюсь обеспечить, всегда работает.
Вместо 'if (($ (/ bin/ps -ef | grep $ service | wc -l)> 1)); то попробуйте гораздо проще: 'if/bin/ps -ef | grep -q $ service; затем ' –
@WilliamPursell. Существует проблема с этим. Даже если '$ service' не запущен, процесс' grep -q $ service' может быть включен в вывод 'ps'. Вот почему код OP запросил '> 1' (то есть два или более). процессов, соответствующих '$ service'. – John1024
Вы хотите выполнить его с помощью Bourne Shell ('sh'), но вы используете' ((....)) 'и' $ (....) ', которые не определены в Bourne. Конечно, если в вашей системе sh связан с bash, эта ошибка не будет очевидна. – user1934428