Hlavní navigace

/usr/bin/timeout: méně známá GNU utilita

4. 3. 2021 9:42 Daniel Novotný

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“.

Sdílet