Безопасное удаление содержимого «рабочей области» и «заданий» в Jenkins

Я унаследовал сервер Jenkins, и мне нужно освободить место. Я установил;

post {
   always {
     deleteDir()
   }
 }

на все задания.

rsync -av -e 'bash -x -c "ssh -p 22 -vvvv $0 $@ 2>/tmp/rsync-ssh.stderr | tee /tmp/rsync.stdout"' --rsync-path='sudo rsync' "backup_user@10.0.0.2:/media/remote_volume/" "/media/local_volume"

Эта команда rsync какое-то время работает нормально, но в итоге выдает ошибку:

tee: standard output: Resource temporarily unavailable

Я предполагаю, что она, скорее всего, не работает по той же причине, которая описана в ответе на следующий вопрос: Почему этот тройник теряет стандартный вывод? Однако мне непонятно, как мне изменить команду SSH в моем случае, чтобы решить проблему.

Кто-нибудь знает, как заставить SSH хорошо играть с тройником в этом сценарии ?

1
задан 23 November 2017 в 18:07
1 ответ

Ознакомившись с решением, обсуждаемым в ответе на вопрос « Почему этот тройник теряет стандартный вывод? », похоже, что решающее изменение заменяет канал с перенаправлением на подоболочку, содержащую команду, которая в противном случае передавалась бы по конвейеру. (Таким образом, заменив: command1 | command2 на: command1>> (command2) )

Причина этого в том, что путем перенаправления на подоболочку, а не напрямую в следующая команда,один заставляет подоболочку обрабатывать все возвращаемые коды ошибок EAGAIN . Как обсуждалось в сообщении на доске объявлений FreeBSD: bin / 164947: tee теряет данные при записи в неблокирующие файловые дескрипторы (также ссылка на ответ на другой вопрос) tee и другие системные двоичные файлы могут плохо справляться с повторными попытками сами.

Для приведенной выше команды rsync следующие изменения, похоже, решают мою исходную проблему:

rsync -av -e 'bash -x -c "ssh -p 22 -vvvv $0 $@ 2>/tmp/rsync-ssh.stderr > >( tee /tmp/rsync.stdout )"' --rsync-path='sudo rsync' "backup_user@10.0.0.2:/media/remote_volume/" "/media/local_volume"
0
ответ дан 4 December 2019 в 04:26

Теги

Похожие вопросы