2004-08-27 01:44
by Vasil KolevТих, спокоен ден… Оправих една-две дреболии, и за пореден път се убедих, че всички скриптове, които се пускат от crontab, трябва да проверяват за работещо тяхно копие… Ето един template за такива скриптове:
#!/bin/sh #the script's uniqe name name=SCRIPTNAME if [ -f /var/run/$name.pid ]; then if [ -d /proc/`cat /var/run/$name.pid` ] ; then echo $name.sh already running! exit 0 fi fi echo $$ > /var/run/$name.pid trap "rm -f /var/run/$name.pid" exit SIGHUP SIGINT SIGTERM #do some stuff echo Ugabugabuga #cleanup rm -f /var/run/$name.pid
В момента работи само за linux, понеже използвам /proc, за да проверя дали pid-а на процеса е валиден, ще работи на всички unix-и, които имат такава семантика.
Вечерта с Велин гледахме “Теория на конспирацията”, след което аз излязох да се разходя малко, че по-голямата част от деня си бях стоял вкъщи. Разходката по центъра на София в 1:00 е приятна, няма много хора, но аз се изпотих бая, още си беше горещо… Кога ли ще дойде есента…
August 28th, 2004 at 00:36
Извинявай, ама по тоя повод точно ТЕБ питах, сещаш ли се, за grep -v?
Мисля че, едно такова:
#!/bin/sh
echo -n “Starting $0 to do my dishes…”
[ `ps -ax | grep $0|grep -v grep| wc -l` -gt 0 ] && exit 1;
echo ” started.”
echo “Cleaning dishes…”
cat /dev/urandom > /dev/dsp&
while /bin/true; do echo “Moron clean your dishes!”; done
би вършило много по добра работа от сложнотията която си написал и ще работи на всичко що има GNU grep(може би и друг grep, стига да работи по същия начин, че нали знаеш гну кви работи нестандартни пишат) :)
August 28th, 2004 at 00:37
кофти филтриране …. там където е && е два пъти `и’
August 28th, 2004 at 00:39
кофти филтриране… там където е && е два пъти `и’
П.с: току що се издъни вордпреса, не знам защо, но като постнах втория коментар ми иска поща а тя беше попълнена… погледни си го :)
August 31st, 2004 at 18:07
То че няма много смисъл да се отговаря на стари постове, няма, ама все пак само като идейка: преди време направих нещо бързичко по въпроса:
http://devel.ringlet.net/sysutils/stalepid/
Така че сега можеш примерно да сложиш в началото на скрипта нещо като:
stalepid “/var/run/$name.pid”
if [ -f “/var/run/$name.pid” ]; then echo ‘Still running!’ 2>&1; exit 1; fi
По принцип самото stalepid беше писано с друга идея – да се пуска в startup скриптове точно преди пускането на истинските демони, които скриптовете стартват-ъпват, ама и така става.