Внезапный сбой дублирования с ошибкой кортежа Python

Выяснилось, что код выхода на самом деле не нужен.Поскольку yad выводит выбранную строку на стандартный вывод, и ничего там, если процесс умер, я попробовал это:

SELPIPE=$(mktemp -u -p "${XDG_RUNTIME_DIR}" "${0##*/}.XXXXXXXXXX")
mkfifo "$SELPIPE"
exec 4<> "$SELPIPE"
yad... 2>/dev/null 1>&4 &
yad_pid=$!

#wait for notification
( read -u 3 line && kill -USR2 $yad_pid ) 2>/dev/null &
pidof_killer=$!
#wait for yad termination and read its stdout on a timeout. If triggers timeout, it's empty
wait $yad_pid
read -u 4 -t 1 SEL
exec 4>&- #close FD4

kill $pidof_killer 2>/dev/null
#etc

Это работает, за исключением того, что убитые процессы любят писать уродливые строки $PID Terminated.

1
17.08.2019, 23:04
2 ответа

Это еще один случай, когда прерванное резервное копирование оставляет дублирование в состоянии, когда его невозможно восстановить. Я удалил частичные файлы из последней инкрементной резервной копии, и теперь она снова работает.

2
27.01.2020, 23:40
Done in 2 steps Tested and worked fine in both scenarios

а. cp orginalfile fileneedto_be_changed' (Нужно сделать только один Раз)

orginalfile=====>which supposed to be changed

б.

differencecount=`awk 'NR==FNR{a[$0];next}!($0 in a){print $0}' orginalfile fileneedto_be_changed|wc -l`

if [ $differencecount -eq  0 ]
then
echo "NO changes in file"
else
echo "Noted there is changes in file"
fi
-121 ---47558 ​​-

Глядя на исходный код, загружаемый с gnu , кажется, что он пытается обработать исключение и при этом получает исключение, что бесполезно. Я думаю, вы находитесь в самых последних строках/usr/bin/duplicity:

except Exception as e:
    util.release_lockfile()
    if "Forced assertion for testing" in util.uexc(e):
        log.FatalError(u"%s: %s" % (e.__class__.__name__, util.uexc(e)),
                       log.ErrorCode.exception,
                       e.__class__.__name__)
    else:
        # Traceback and that mess
        log.FatalError(util.exception_traceback(),
                       log.ErrorCode.exception,
                       e.__class__.__name__)

Он вызывает util.uexc(e)для поиска текста, который используется только во время тестирования (, по-видимому ), и по какой-то причине эта процедура не работает. Вы можете попробовать просто изменить ifна запуск if False andвместо того, чтобы обойти этот тест и посмотреть, получите ли вы тогда реальную причину зарегистрированного исключения. Вы также можете попробовать временно перейти на локаль C, чтобы посмотреть, изменит ли это что-нибудь.

0
27.01.2020, 23:40

Теги

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