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 е приятна, няма много хора, но аз се изпотих бая, още си беше горещо… Кога ли ще дойде есента…

4 Responses to “2004-08-27 01:44”

  1. валяк Says:

    Извинявай, ама по тоя повод точно ТЕБ питах, сещаш ли се, за 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, стига да работи по същия начин, че нали знаеш гну кви работи нестандартни пишат) :)

  2. валяк Says:

    кофти филтриране …. там където е && е два пъти `и’

  3. валяк Says:

    кофти филтриране… там където е && е два пъти `и’
    П.с: току що се издъни вордпреса, не знам защо, но като постнах втория коментар ми иска поща а тя беше попълнена… погледни си го :)

  4. Петър Пенчев Says:

    То че няма много смисъл да се отговаря на стари постове, няма, ама все пак само като идейка: преди време направих нещо бързичко по въпроса:

    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 скриптове точно преди пускането на истинските демони, които скриптовете стартват-ъпват, ама и така става.

Leave a Reply