Назад | Перейти на главную страницу

Объединение тайм-аута и cpulimit

У меня есть ситуация, когда процесс, который зависает при определенных обстоятельствах или работает слишком долго, должен быть убит. Также я не хочу, чтобы процесс занимал 100% процессорного времени. Я думаю, что мне следует совместить cpulimit и timeout.

Я могу заставить каждую команду работать отдельно, но не вместе:

cpulimit -l 20 -- /usr/lib/libreoffice/program/soffice.bin --headless --convert-to pdf broken.docx

timeout -k 6 -s 15 6s /usr/lib/libreoffice/program/soffice.bin --headless --convert-to pdf broken.docx

Я бы хотел сделать что-то вроде:

cpulimit -l 20 -- | timeout -k 6 -s 15 6s /usr/lib/libreoffice/program/soffice.bin --headless --convert-to pdf broken.docx

Вы можете попробовать запустить timeout команда как аргумент cpulimit:

cpulimit -l 20 -- timeout -k 6 -s 15 6s /usr/lib/libreoffice/program/soffice.bin --headless --convert-to pdf broken.docx

Обратите внимание, что это точно так же, как ваш последний пример, но без трубы | (конвейер связывает вывод первого процесса с вводом второго, что вам здесь не нужно).

В итоге я использовал nice с участием timeout вместо. Одна проблема с cpulimit и timeout комбо было то soffice.binпородил несколько процессов, и родительский процесс каким-то образом не пострадал.

Это решило мою проблему.

Также nice вместо жесткого ограничения ресурсов дать процессу возможность использовать 100% ЦП, если другие процессы не запущены.

nice timeout -k 5 6s /usr/lib/libreoffice/program/soffice.bin --headless --convert-to pdf broken.docx