2013-11-20 3 views
5

Это может быть очень простой вопрос, но я не понимаю, почему он ведет себя таким образом. Когда я призываюlockfile-create не работает в скрипте bash

lockfile-create --use-pid --retry 0 /tmp/my_lock_file 

возвращает 0, и в следующий раз он бежит она возвращает некоторый другой код (4), как ожидается, так как он уже создал файл блокировки. Но когда я обертываю тот же самый код в файле сценария bash, он всегда возвращает 0 в качестве кода выхода. Кто-нибудь знает, почему это не работает?

Update: Полное содержание Баш файл

#! /bin/bash 

LOCK=alert 

lockfile-create --use-pid --retry 0 $LOCK 
LOCK_CREATED=$? 
echo "Lock file creation status $LOCK_CREATED" 

и это, как я запускаю его ./alert.sh.

+0

Есть ли у вас что-нибудь в скрипте, отличном от этой строки? – Barmar

+0

Тогда он должен работать как ожидалось. Статус выхода скрипта - это статус выхода последней выполненной команды. – Barmar

+0

#!/bin/bash LOCK = предупреждение lockfile-create --use-pid --retry 0 $ LOCK LOCK_CREATED = $? echo «Статус создания файла блокировки $ LOCK_CREATED» - это то, что находится в файле. Извините за загроможденное форматирование – Bunti

ответ

3

Но когда я обертываю тот же самый код в файле сценария bash, он всегда возвращает 0 в качестве кода выхода.

Это связано с тем, что при повторном выполнении сценария PID процесса, выполняющего сценарий, изменился. Таким образом, флаг --use-pid вызывает lockfile-create, считая, что файл блокировки необходимо перезаписать.

В зависимости от вашего варианта использования, вы можете избавиться от флага --user-pid. Однако в этом случае вам нужно будет убедиться, что вы сами очищаете файл блокировки.

Цитируя man lockfile-create:

-p, --use-pid 
     Write the parent process id (PPID) to the lockfile whenever a lock‐ 
     file is created, and use that pid when checking a lock's validity. 
     See the lockfile_create(3) manpage for more information. This 
     option applies to lockfile-create and lockfile-check. NOTE: this 
     option will not work correctly between machines sharing a filesys‐ 
     tem. 

Вы можете проверить поведение вы наблюдаете, пытаясь создать файл журнала снова в том же сценарии:

#! /bin/bash 
LOCK=alert 

lockfile-create --use-pid --retry 0 $LOCK 
LOCK_CREATED=$? 
echo "Lock file creation status $LOCK_CREATED" 
lockfile-create --use-pid --retry 0 $LOCK 
LOCK_CREATED=$? 
echo "Lock file creation status $LOCK_CREATED" 
+0

Да, Хорошее объяснение. Он решил мои проблемы, и я не хотел использовать PID по какой-либо причине. Спасибо devnull – Bunti

Смежные вопросы