«Сторожевой таймер» для приложений

Возникла проблема с тем, что иногда LibreOffice повисает. Например при попытке конвертации из формата PDF. При этом он начинает есть 100% ресурсов одного ядра, и пока не остановишь сервер ничего не помогает. Попытка обратиться с багом в сообщество привела к ответу о том, что мы не поддерживаем этот формат и свободен. Печально, но как-то надо выкрутиться.

Идея в общем появилась такая — при начале выполнении скрипта в отдельный каталог помещаем файл с идентификатором конвертации, и в случае успешной конвертации удаляем его. Главное чтобы конверация завершилась до тайм-аута. Затем через Cron проверяем есть ли этот файл, скажем минуты через 3, если есть — то считаем что LibreOffice повис и его необходимо перезапустить.

#!/bin/sh

#Задаем переменную директории
DIR=/var/www/html/libreoffice

while true
do
case `find $DIR -type f -mmin +3  | wc -l` in
0 )
    exit
    ;; #можно добавить свои команды
* )
    date >>/var/www/html/restart.txt
    find $DIR -type f -mmin +1 >>/var/www/html/restart.txt
    rm /var/www/html/libreoffice/*
    killall soffice.bin;
    sleep 5;
    /usr/bin/unoconv --listener &
    exit
    ;; #конец скрипта
esac
done
exit 0

В файл лога /var/www/html/restart.txt запишется время и идентификатор «ошибочных» конвертаций. Затем можно проанализировать ситуацию и больше не допускать её. Например, гораздо логичнее запретить конвертировать файлы формата PDF в LibreOffice.

Но я бы все-таки рекомендовал оставить данную защиту, ибо файлов миллионы — и мало ли на чем зависнет LibreOffice.