То, что вам нужно в вашем скрипте, это не бесконечный цикл, а файл блокировки.
Затем вызовите сценарий, который выполняет работу внутри сценария-оболочки.
#!/bin/sh
if [ -f /tmp/.lock.my-mgr ]
then
echo "Program in use... exiting..."
exit 10
fi
/bin/touch /tmp/.lock.my-mgr
/usr/local/bin/myscript.sh
/bin/rm /tmp/.lock.my-mgr
Если вы хотите, чтобы эта задача выполнялась пакетом каждые несколько минут, запланируйте это с помощью cron.
Редактировать:
PID сценария, работающего с циклом, может быть помещен в файл с чем-то вроде
echo $! > /var/tmp/script1.pid
(одним шрифтом ).
Чтобы проверить, запущен ли он из второго скрипта, используйте команду ps, что-то вроде
ps -p `cat /var/tmp/script1.pid`
, а затем проверить его статус с помощью $? переменная, которая должна быть равна 0, если ps нашел этот pid, или 1, если нет. Это базовая логика, но ее можно было бы написать с лучшими тестами, например, на случай, если файл pid не существует.
Я сам нашел решение:
sshpass -p $passvar ssh -o StrictHostkeyChecking=no -t $uservar@$ItemHostIp 'touch /does/not/exist.txt &>/dev/null'; errm=$?