Mám nějaké roboty, které spouští systémový plánovač v daném časovém intervalu. Ale někdy kvůli nějaké logické chybě musím tyto roboty zastavit ručně. Jak mohu najít tyto procesy spuštěné plánovačem a zabít je?
Přijatá odpověď:
Procesy můžete zabít podle jména. Například v systémech Linux, *BSD a Solaris pkill myprogram
zabije všechny procesy, jejichž jméno obsahuje myprogram
(použijte pkill '^myprogram$'
pro přesnou shodu). Pokud jej spustíte jako uživatel bez oprávnění root, budou zabity pouze procesy tohoto uživatele a existují další možnosti kontroly shody (podrobnosti najdete v příručce k vašemu systému).
Pokud chcete konkrétně cílit na procesy spouštěné plánovačem a zabíjíte procesy ručně, můžete spustit ps f
(pouze Linux) nebo pstree
(pouze Linux) nebo ptree
zobrazíte procesy ve stromu a uvidíte, které procesy spustil cron.
Pokud chcete mít možnost tyto procesy automaticky zabíjet domácí metodou, uložte je ID procesu do souboru. Tento druh souboru se nazývá pidfile, když se používá pouze k tomu, že běží pouze jedna instance procesu (což může nebo nemusí být něco, co chcete). Pokud chcete více instancí, uložte PID do samostatných souborů ve společném adresáři; zde je fragment shellu, který to dělá:
pid_dir=/var/run/myprogram # must have been created e.g. at boot time
myprogram &
pid_file=$pid_dir/$!.pid
touch "$pid_file"
wait
rm "$pid_file"
Lepším řešením, pokud máte tvrdá kritéria pro detekci běžících procesů, je použít obecný monitorovací program nebo v jednoduchých případech pouze omezit dobu, po kterou může proces běžet. Tyto odkazy vám mohou pomoci:
- „Monit může spustit proces, pokud neběží, restartovat proces, pokud nereaguje, a zastavit proces, pokud využívá příliš mnoho zdrojů.“
- Potřebuji pomoc s cronjobem, abych mohl sledovat utékající procesy a zabíjet je
- Jak omezit využití prostředků, aby se ušetřil CPU+RAM pro určitý proces?
- Existuje způsob, jak omezit množství paměti, kterou může konkrétní proces používat v Unixu?