Portál AbcLinuxu, 5. května 2025 23:23
pidof check-signs | wc -wpokud je pousteny shellem, tak misto check-sign dej nazev interpretu..
pidof -x check-signs | wc -w
pidof -x /bin/bash/check-signs | wc -wdíky
pidof -x /root/check-signs
stačí. Parametr -x
zaručí, že se vrátí i pid pro cmdline /bin/bash /root/check-signs
.
pidof -x check-signs | wc -w
Tedy za předpokladu, že neběží jiný skript, který se jmenuje taky check-signs, ale je uložený jinde...
#!/bin/bash PIDS=$(pidof -x $0) CNT=$(echo $PIDS|wc -w) echo "$$: $0 $PIDS => ${CNT}. times running" while true; do sleep 10; done &Jestli ale chceš zajistit, aby skript mohl běžet pouze jednou, potom se používají poněkud jiné techniky. Při startu se pokusí vytvořit a zablokovat tzv.
pidfile
, do kterého se uloží vlastní proces id (pid). Pokud se to podaří, znamená to, že běží sám, pokud se to nepodaří, je jisté, že daný proces už běží. Určitě si vygooglíš i lepší popis, tohle je jen ve stručnosti, abys nevymýšlel kolo.
( flock -x -w 2 200 if [[ $quot;$?$quot; != $quot;0$quot; ]]; then echo -e $quot;\n\nOnly one instance is allowed!\n$quot; exit 1 fi #my code ) 200>$quot;/var/lock/myscript.lock$quot;
( flock -x -w 2 200 if [[ "$?" != "0" ]]; then echo -e "\n\nOnly one instance is allowed!\n" exit 1 fi #my code ) 200>"/var/lock/myscript.lock"
zablokovat = zamknout
Vyjádřil jsem se dost nepřesně, ale moc jsem nepředpokládal, že by tazatel využil právě tuhle část mojí odpovědi. Přece jen otázka směřovala poněkud jinam.
Přepsání souboru zamezí právě ten zámek, jehož držitelem může být v jeden okamžik jen jeden proces. Zámku se ten proces může vzdát sám nebo se zruší automaticky s ukončením procesu, který ho držel. Ale jak říkám, přesnější popis se dá určitě někde vygooglit, mě šlo jen o to, navést ho případně na správnou stopu.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.