Как я могу заблокировать файл из программы, запущенной как задание cron в Linux? - PullRequest
0 голосов
/ 04 февраля 2010

Я использую fcntl в своих кодах, чтобы заблокировать файл и разблокировать, чтобы практиковать, как mutex в Windows ... Я запускаю свое приложение в Linux вручную, я получил правильный результат, с приложением работает гладко ... но меня попросилиbash-скрипт для ежедневного запуска приложения .... мой скрипт

cd myapppaht
./myapp

однако я получил [Bad file descriptor] при попытке заблокировать позицию в файле ... практика задач crontab не так эффективна, какручной пользователь root?

#define writew_lock(fd , offset , whence , len)  lock_reg((fd) , F_SETLKW , F_WRLCK , (offset) , (whence) , (len))

#define un_lock(fd , offset , whence , len)  lock_reg((fd) , F_SETLK , F_UNLCK , (offset) , (whence) , (len))

1 Ответ

1 голос
/ 04 февраля 2010

Не видя ваш код блокировки или не зная, как он запускается из cron, больше ничего не поделаешь.

Fcntl

Согласно руководству GNU C Library для блокировок файлов , вы можете получить EBADF (неверный дескриптор файла) при запросе блокировки записи, когда дескриптор файла не открыт для доступа для записи.

Страница man fcntl добавляет, что вы можете получить EBADF при использовании F_SETLKW, когда режим открытия файлового дескриптора не соответствует типу запрошенной блокировки. Поскольку ваше приложение работает без проблем при запуске вручную, я сомневаюсь, что это проблема.

  • Отсюда я бы проверил ответ на ваш звонок на open.

кронтаб

Согласно этой справочной странице Linux crontab , каждый пользователь имеет свой собственный crontab, и команды в любом данном crontab будут выполняться как пользователь, который владеет crontab. Это зависит от версии cron, так как некоторые (более старые) версии указывают пользователя в самом файле crontab.

  • Вы также можете проверить настройки crontab.
...