Вещи попробовать.
Я знаю, что это звучит глупым, но удостоверьтесь что каталог /apachelogs/data
существует. Также удостоверьтесь, что файл существует, /apachelogs/data/file
и это у Вас есть полномочия управлять им.
Я подтвердил бы, что вышеупомянутые команды могут работать в оболочке непосредственно прежде, чем попытаться сделать их из Python.
Попробуйте следующее:
$ cd /apachelogs/data
$ touch foobar
Теперь добавьте расширенный атрибут:
$ setfattr -n user.foo -v bar foobar
$ getfattr -d foobar
# file: foobar
user.foo="bar"
man bash:
Если bash ожидает завершения команды и получает сигнал, для которого установлена ловушка, ловушка не будет выполнена до завершения команды. Когда bash ожидает асинхронную команду с помощью встроенной функции wait, получение сигнала, для которого была установлена ловушка, заставит встроенную функцию wait немедленно вернуться со статусом выхода больше 128, сразу после чего ловушка будет выполнена.
Вместо этого сделайте sleep 100
и дождитесь его завершения. Однако я не знаю, обрабатываются ли несколько сигналов несколько раз.
Вы можете передать счетчик длительному заданию двумя основными способами:
Общий счетчик достаточно прост:
if (set -o noclobber; echo $$ > /tmp/grumpy-waiters.lock); then
echo >> /tmp/grumpy-waiters
rm -f /tmp/grumpy-waiters.lock
fi
Затем длительное задание может считывать счетчик следующим образом:
num_grumpy_waiters=0
if [ -s /tmp/grumpy-waiters ]; then
num_grumpy_waiters=$(wc -c < /tmp/grumpy-waiters)
fi
Подход с неразделенным сбором включает создание нескольких файлов без необходимости блокировки. Это менее рискованно, но более сложно. Каждый отказавший экземпляр создает или обновляет свой собственный счетчик:
grumpy_shard=1
if [ -s /tmp/grumpy.${LOCKPID}.$$ ]; then
grumpy_shard=$(expr $(cat /tmp/grumpy.${LOCKPID}.$$) + 1)
fi
echo ${grumpy_shard} > /tmp/grumpy.${LOCKPID}.$$
Длительно работающий экземпляр может собирать эти счетчики и агрегировать их сразу после того, как он снимает главную блокировку:
num_grumpy_waiters=$(cat /tmp/grumpy.$$.* 2>/dev/null | awk 'BEGIN{s=0}NF>0{s=s+int($1)}END{print s}')
rm -f /tmp/grumpy.$$.* 2>/dev/null
В любом случае, использование сигналов для прерывания сценария оболочки победило ' t вызвать своевременное прерывание. Если вам это нужно, то скрипт должен включить слушателя в свой собственный фон, чтобы он мог немедленно реагировать на сигнал.