0

コードでfcntlを使用してファイルをロックし、ロックを解除して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))
4

1 に答える 1

1

ロックコードを見たり、cronからどのように起動されているかを知らなければ、先に進むことはあまりありません。

fcntl

ファイルロックに関するGNUCライブラリのマニュアルによると、EBADFファイル記述子が書き込みアクセス用に開かれていない書き込みロックを要求すると、(不正なファイル記述子)を取得できます。

fcntlのマニュアルページには、ファイル記述子のオープンモードが要求されたロックのタイプと一致しないEBADF場合に使用できることが追加されています。F_SETLKW手動で起動するとアプリがスムーズに動作するので、これが問題ではないかと思います。

  • これから、への呼び出しの応答を確認しますopen

crontab

このLinuxcrontabのマニュアルページによると、各ユーザーは独自のcrontabを持っており、任意のcrontabのコマンドは、crontabを所有するユーザーとして実行されます。一部の(古い)バージョンではcrontabファイル自体でユーザーが指定されているため、これはcronのバージョンによって異なります。

  • crontabの設定を確認することもできます。
于 2010-02-04T15:29:24.967 に答える