To jsem takhle jednou měl za úkol napsat skript, který bude pouštět různé příkazy a reagovat v závislosti na tom, zda dopadnou dobře nebo ne.
Ale co se stane, když nějaký takový příkaz může skript zablokovat, tedy neustále „viset“ a neukončit se? Potřeboval jsem mechanismus timeoutu.
Nakonec jsem použil řešení přímo z dílny GNU: příkaz „timeout“ je v systému v rámci balíčku coreutils a měl by být tedy na dostatečně moderním systému přítomen „všude“.
Syntaxe je jednoduchá: například „timeout 60s příkaz parametry“ pustí příkaz s parametry a čeká na něj 60 sekund a poté ho ukončí (implicitně pomocí signálu SIGTERM a pokud proces nezareaguje, tak SIGKILL) a vrátí přesně definovaný nenulový status kód. Pokud příkaz doběhne do té doby sám, samozřejmě předá jeho reálný status kód, jako by se příkaz vůbec nepouštěl přes „timeout“.
Protože se taková věc může někdy hodit, rozhodl jsem se o tom narychlo „blognout“.
Přečteno 18 542×
Přečteno 14 210×
Přečteno 12 757×
Přečteno 12 512×
Přečteno 8 939×