Portál AbcLinuxu, 8. listopadu 2025 20:41
#!/bin/bash if [ podminky ]; then echo "Server je jiz spusteni!" else PODMINKA NA SPUSTENI VE SCREENU S PRIRAZENYM PIDEMAsi bych si to predstavoval jako neco ve smyslu "screen -A -m -d -S `PRIKAZ`
ps nebo /proc/<pid>/*. Nějak se ty aplikace nejspíš liší, tak se zamyslete čím a pak je podle toho rozlište v té vaší podmínce. Nejdříve si zjistěte pidof aplikace, a pak pro získané pids zjistěte, jestli je to ta co myslíte, nebo není.
(Nevím bohužel co myslíte tím "jiný core" a "jiné umístění"). Pokud třeba startovací adresář tak to by snad šlo také zjistit z prostředí.
#!/bin/bash
MANGOSDIR=/home/mangos/server
if (ps -C mangos-worldd )
then echo "status : OK"
else
echo "status : DOWN"
cd ${MANGOSDIR}/bin
screen -d -m -S session_name ${MANGOSDIR}/bin/mangos-worldd
fi
Obdobne i pro realmd, pokud take mrzne. A nakonec pridat zaznam do cronu aby to treba kazdou minutu kontroloval.
screen je proč přesně? Aby docílil toho, co dělá nohup? Nebo se ten server za běhu interaktivně ovládá a tak na to mám sezení, do kterého se mohu přihlásit?
Nicméně zpět k tazateli: když jste zmínil dvě různé cesty k binárce, tak to bude asi Vaše nejsnazší řešení. Když spustíte s plnou cestou a pak třeba i z ps to vylámete snadno (ps -o cmd).
Vaše konstrukce s podmínkou není problém, prostě si napíšete funkci bezi(identifikator_instance), která bude vracet true/false podle stavu dané instance a podmínka se podle toho zachová.
Pokud byste to mocí mermo chtěl řešit přes PID, musel byste si ho někam pro jednotlivé instance zapisovat při startu (zřejmě /var/run a pak s ním pracovat).
screen se v tomhle pripade pouziva proto, ze ten deamon funguje zaroven jako konzole (neni nutna, ale casto se tak vyuziva).
Kazdopadne zapisovani PID po startu by melo byt v tomto pripade samozrejmosti.
Ale nerozumim tomu proc tam mangos-worldd bezi 2x, pokud na tom serveru jede jediny realm, tak neni duvod, aby tam ten proces byl vicekrat. Pokud je tak pojmenovan ten restartovaci skript, tak to je samozrejme chyba, ten by mel byt napr. mangos-restarter.sh.
/proc/<pid> obou procesů? Nenašel jste žádný rozdíl? Na pid se už vykašlete, tím "přiřadit asi nepude" jsem myslel "přiřadit určitě nepude".
nejak evidoval ten mangos-worldd ktery potrebuju
Jak jsem již řekl, zamyslete se a řekněte, jak rozlišujete vy ten magnos-worldd který potřebujete.
Server je zkompilovaný na stejný verzi a jako /bin pro spusteni je mangos-worldd jenze ten se kompiluje u vsech verzi, tudiz v ps, top je 2x mangos-worldd
Liší se tedy poloha binárky? Může pomoct /proc/<pid>/exe a podobně.
fork() žádné parametry nemá.
Krom toho, že i kdyby to šlo, tak by to byl problém, protože dané pid byste také musel být schopen rezervovat, aby je náhodou nedostalo něco jiného.
Asi na to budete muset jít jinak. Napadají mě dvě varianty:
ps nebo se pohrabat v /proc/<PID/>.
lsof nebo zahrabat v /proc/$$/fd/.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.