У меня есть скрипт bash, который я запускаю, чтобы проверить, не зависла ли одна из моих программ и не уничтожила ли она ее. Сценарий работает нормально, если запускается из командной строки, но если я планирую его с помощью cron, он делает что-то очень странное.
Обычно скрипт (ниже) получает PID моей программы и получает дату / время его создания из записи в каталоге / proc /. Затем он получает текущую дату / время из системы и преобразует эти два значения в секунды с 1970 года с помощью команды «дата», прежде чем окончательно вычесть их. Это обычно заканчивается 2100 секундами или чем-то вроде этого, что равняется 35 минутам.
#!/bin/bash
THEDATE=$(date +%s)
MYPID=$(ps aux|grep -v grep|egrep "MyProgram.exe"|awk '{print $2}')
if (( ${#MYPID} > 0 )); then
STARTTIME=$(ls -ld /proc/$MYPID|date +%s -d"$(awk '{print $6, $7}')")
TOTALMINS=$(( ($THEDATE - $STARTTIME) / 60 ))
if (( $TOTALMINS >= 30 )); then
kill -9 $MYPID
logger -t "[KillLongRunningProcesses] Killed my program which had been running for $TOTALMINS minutes"
fi
fi
При запуске из командной строки две переменные даты (THEDATE и STARTTIME) получают правильные значения. Но когда запускается cron, STARTTIME неверен. У него правильная дата, но, похоже, он игнорирует часть времени и устанавливает ее в полночь, то есть вместо «2009-12-14 13:23:00» получается «2009-12-14 00:00:00», что скидывает все расчеты.
Есть идеи? Спасибо.