Это тот же вопрос, что и Как изящно остановить выполнение задания при сбое одного шага в Rundeck? за исключением того, что я хочу изящно остановить задание, когда оно убито из веб-интерфейса пользователя.
У меня такая же работа, как и у другого автора вопроса: он выводит некоторые таблицы SQL;немного манипулировать свалками;загрузить их куда-нибудь;и очистка.
Проблема возникает, когда задание прекращается или уничтожается перед очисткой;он заполняет диск файлами, которые никогда не удаляются.Rundeck поддерживает обработчики ошибок для этого, но в документах говорится, что это из-за ошибок, а не из-за ручного уничтожения из пользовательского интерфейса.
Я могу выполнить очистку при выходе (успех или ошибка) с помощью следующегов моем сценарии:
#!/bin/bash -ex
finish() {
echo "remove dir $OUTPUT..."
rm -Rf "$OUTPUT"
}
trap finish EXIT
# ... rest of the script ...
Однако этот шаг не выполняется, когда задание убивается из пользовательского интерфейса.Я копался в исходном коде Rundeck, и он, кажется, просто использует Thread#interrupt
, который я, вероятно, не могу уловить.
Есть ли какое-либо решение этой проблемы?Прямо сейчас я должен ssh
войти в узел и самостоятельно почистить вещи, когда убью работу.