如何从Linux上作为cron作业启动的程序中锁定文件?

时间:2010-02-04 03:45:04

标签: c linux locking task crontab

我在我的代码中使用fcntl来锁定文件并解锁以在Windows中像mutex一样练习... 我手动启动我的应用程序,我得到了正确的结果,应用程序运行顺利... 但我被要求制作一个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 个答案:

答案 0 :(得分:1)

如果没有看到您的锁定代码或知道如何从cron启动锁定代码,就没有太多可以继续下去了。

的fcntl

根据GNU C Library manual on File Locks,您可以在请求写锁定时获取EBADF(错误文件描述符),其中文件描述符未打开以进行写访问。

fcntl man page补充说,当使用EBADF时文件描述符打开模式与请求的锁定类型不匹配时,您可以获得F_SETLKW。由于您的应用在手动启动时运行顺畅,我怀疑这是问题所在。

  • 从此,我会检查您对open
  • 的回复

的crontab

根据这个Linux crontab man page,每个用户都有自己的crontab,任何给定crontab中的命令都将作为拥有crontab的用户执行。这取决于cron的版本,因为某些(较旧的)版本在crontab文件中指定用户。

  • 您也可以查看自己的crontab设置。