8

EPEL リポジトリから incron をインストールしました (質問する前に; はい、ソースをダウンロードしてローカルでコンパイルしようとしました; 同じ結果です)。CentOS 6.4 (最終) 仮想ボックスでプロセスをセットアップしようとしていますが、これはプロトタイプ化に成功しています。私のローカルUbunto 12.04マシンで:

前もっていくつかの情報:

  • SELinux は PERMISSIVE に設定されています
  • スクリプトを追加し、NOPASSWD を使用してすべての実行可能ファイルを呼び出してvisudo、いくつかの権限の問題を回避しました...

コマンドラインからスクリプトを呼び出すとsudo /path/to/my/script.sh arguments、魅力的に機能します。

sudo service incrond statusincrond が実行されていることを確認します。root と myusername が に追加され/etc/incron.allow/etc/incron.deny空です。

ルートの私の incrotab は次のとおりです。

/path/to/dropfolder/ IN_CLOSE_WRITE sudo /path/to/my/script.sh $@/$#

イベントの/path/to/dropfolder/結果、まったく何も起こりません。フォルダー内のファイルに対して、ログは生成されず、メッセージもアクションも発生しません。

だから私は調査しcronました:最小限の環境で実行され、複雑なコマンド/スクリプトを実行する.bashrcには、cronコマンドの先頭でPATHを実行および/またはエクスポートする必要がある場合があることが示唆されました。

注:最小限の環境でも動作することをサポートするドキュメントは見つかりませんが、私の google-fu (および bing-fu!) は、私が考えた WTH にincron直接関連する有用な結果をもたらさなかったので、試してみます!incron

編集:ドキュメントはincron、システムテーブルから実行するか、ルートがホスト環境からenvを取得することを示しているため、incronルート以外のユーザーによって実行される場合にのみ、何らかの種類のenvまたはPATHの調整が必要です

つまり… root の incrontab:

/path/to/dropfolder IN_CLOSE_WRITE . /home/myusername/.bashrc; export PATH=$PATH:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin; sudo /path/to/my/script.sh $@/$#"

ダイスなし…&&代わりに試みた;=ダイスなし。上記のバリエーションを思いつくことができれば、私はおそらくそれを試しました…

では、ちょっとしたrestorecond -R /usr/sbin/incrond /etc/incron*行動をしてみましょう!うーん、そこも変わらない。 service incrond stop続いてservice incrond start、そしてservice incrond restart…いいえ、いいえ、そしていいえ。

抜本的な対策:yum remove incronyum install incronchkconfig incrond onそして適切な対策としてsudo reboot!

何もない。

からは何も得られないため、 が疎な環境で実行されているかどうかを確認する/tmp/ IN_ALL_EVENTS echo boo>>/home/myusername/boofile.txtことさえできません… (上記の注を参照)env>>envfile.txtincron

それでも:service incrond status利回りincrond (pid xxxx) is running...

私は何が欠けていますか?それは大きくて明白でなければならず、誰かが私をすぐに馬鹿だと感じさせてくれることを願っています!

さらに検査すると、次の/var/log/cronような結果が得られます: Aug 14 15:05:30 hostname incrond[1584]: (root) CMD (sudo /path/to/DropFolder/script/subfolder/script-Beta-1.sh /home/username/DropFolder/testfile.file)-yes I made sure my script was executable..

したがって、incrond は確かに何かを実行しようとしていますが、どこにも出力が得られません...単純な結果でもecho > /dev/pts/0nadaの結果が生成されます。

  • 私のがらくたの書式設定ジョブを修正してくれてありがとう
4

1 に答える 1

9

わかりました、ここに答えがあります:

すべてのドキュメントにもかかわらず、incrondCentOS 6.4 では、スパース環境で実行され、cron. これは、incron がシステム テーブルとルート テーブルのルートから環境を継承し、ユーザー テーブルのみがスパース環境で実行される Ubuntu では当てはまりません。これはもちろん、スクリプトを呼び出す場合 (私はそうです)、スクリプトはその環境を構築する必要があり、すべてのものにフル パスが必要であることを意味します。すべて。(まあ、シェルのビルトインを除いて:p)

多数のGoogle、およびBing、Stack Overflow、およびServer Faultの検索はすべてcron、このように動作することを私に教えてくれましたが、それらはすべて、ドキュメントに記載されているように動作することを示しているようにも見えましincronた.Ubuntuの下で...

要するに、今はうまくいきます。

  • 私はこれが示されていると思います: 疑わしいときは、環境を定義して完全なパスを使用してください...ええと、実際には、常にそれを行うだけで、頭痛の種を節約できます.

(これは に SELinux セキュリティ ポリシーを適用する際の問題には対処しませんincronが、後で別の投稿で心配します...)

于 2013-08-16T15:26:44.847 に答える