Мне сложно понять, почему следующий случай оставит файл «lock», присутствующий в файловой системе.Почему этот файл не удаляется?
файл script
:
#!/bin/sh
set -e
run-parts sub &> /dev/null
файл sub/subscript
:
#!/bin/sh
set -e
# Exit if another job is running.
[ -e ./lock ] && exit 0
trap "rm -f ./lock; exit" 0 1 2 5 15
touch ./lock
echo "test"
Когда сейчас работает run-parts --report .
в папке, где script
является, почему это выход с файлом lock
настоящее время?
То, что я думаю, что он должен делать:
1) ищет работоспособные сценарии в текущей папке (находит script
)
2) он будет работать script
и внутри него будет работать еще Заурядные части экземпляр, который находит сценарий sub/subscript
и запустить этот один
3) файл sub/subscript
создаст файл lock
и должны удалить его усиления при возникновении сигналов 0, 1, 2, 5 или 15.
То, что я узнал до сих пор:
1) Удаление &> /dev/null
удалит файл блокировки
2) Удаление --report
также удалить файл блокировки
Однако в моем случае, это две резолюции не являются опцией, поскольку я не являюсь хранителем кода.
Из того, что я понимаю, ни один из указанных сигналов не будет срабатывать. Почему это?
ОС: Debian Jessie
Вместо '&>/dev/null', попробуйте перенаправить на файл, например' &>/tmp/out', и посмотреть, содержит ли вывод что-нибудь полезное? –
К сожалению, файл блокировки все еще присутствует и создается пустой файл '/ tmp/out'. – 1FpGLLjZSZMx6k
Я подозреваю, что «ловушка» не вызывается при определенных обстоятельствах. Это помогает, если вы можете добавить дополнительный 'touch/tmp/trap.stat' в код' trap', чтобы проверить, действительно ли это так. Если вызов 'trap' является проблемой, это может быть проблемой конкретной ОС. – codeforester