NFSがマウントされる前に実行されるCrontab


9

Cronjob @rebootを実行すると、nfs共有上のファイルが存在しないことが返されます。

@reboot python /abs/path/to/script.py

起動時のcrontabからのメールに「多かれ少なかれ」と表示される

/usr/bin/python can't open file "/abs/path/to/script.py": [Error No. 2] No such file or folder.

スクリプトはコマンドラインから問題なく実行できます。
理論的には、マウントが実行される前にcronjobが実行されています。
質問。

  1. この理論は正しいですか?
  2. ドライブがマウントされるまでジョブを強制的に停止させる方法はありますか?....コマンドにスリープ60を入れるだけではありません。;)私は既にそれを試しましたが、それはヒットしてミスであり、スクリプトが時間の100%をすばやく実行する必要があります。

2
どのディストリビューションを使用していますか?
スヴェン

回答:


16

コマンドを実行する前に、mountpointコマンドを使用してマウントが行われたことを確認できます(例:/ absがマウントポイントであると想定)

#!/bin/bash
while true
do
    if mountpoint -q /abs
        then
            /usr/bin/python /abs/path/to/script.py
            break
        fi
    sleep 10
done

3
+1聞いたことがないmountpoint-これは非常に便利です。
スヴェン

@SvenW同じです。これで、いくつかのスクリプトを更新しています。
アーロンコプリー

システムの再起動中、nicがシステムをマウントする準備ができているかどうかもわからないため、nicの準備ができる前にファイルシステムをマウントしようとすると、悲惨な結果になる可能性があります。
Rusty Weber

4

ネットワーキング後にcronが起動するため、問題は何なのかわかりません。(Red Hatおよびデリバティブのうち少なくとも。)であなたのマウントです/etc/fstab_netdevオプション、または他のどこ?

起動時に何かを実行する標準的な方法は、それをに含めることです/etc/rc.local。これは、ネットワークが初期化され、他のすべてのサービスが開始された後に実行されます。(リモートファイルシステムのマウントを含みます。)

(または、文字どおりの再起動後にのみスクリプトを実行する理由はありますか?)


はい、共有はfstabにマウントされます。私はubuntuで実行していました。つまり、ネットワークが実行されていなかった可能性があります。etc / rc.localが最善の解決策のようですが、@ restartがcrontabに存在する場合は、それが機能するはずであると想定されます。
Rusty Weber

1

ここにあなたのためのいくつかのアイデアがあります:

  1. NFSがマウントされているかどうかを確認します。そうでない場合は、マウントしてからスクリプトを実行します。

    [ ! -f /abs/path/to/script.py ] && mount -t nfs device dir && python /abs/path/to/script.py

  2. start()NFS initスクリプトの関数でスクリプトを実行します。

    echo -n $"Starting NFS mountd: "
    daemon rpc.mountd $RPCMOUNTDOPTS
    RETVAL=$?
    echo
    [ $RETVAL -ne 0 ] && exit $RETVAL || python /abs/path/to/script.py
    

1

Pythonスクリプトが実行可能であることを確実に確認します。マウントポイントが表示されたことを確認するには、ローカルストレージに保存されているスクリプトでそれをラップする必要があります。

(警告擬似コード)のようなもの:

while (!ScriptExists && ErrorCount < 10)
do
    mount /my/mount/point
    sleep 10
    ErrorCount++
done
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.