Crontab berjalan sebelum nfs dipasang

9

Menjalankan Cronjob @reboot mengembalikan bahwa file di nfs share tidak ada.

Contoh

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

email dari crontab saat startup berbunyi "kurang lebih"

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

Script dapat dijalankan dari baris perintah tanpa kesulitan ..
Teori adalah bahwa cronjob berjalan sebelum mount telah dijalankan.
Pertanyaan-pertanyaan.

  1. Apakah teori ini benar?
  2. Apakah ada cara untuk memaksa pekerjaan meratap sampai drive sudah terpasang? .... Selain hanya menempatkan tidur 60 ke perintah. ;) Saya sudah mencobanya, tapi itu gagal dan gagal dan saya perlu skrip untuk menjalankan 100% dari waktu dengan cepat.
Rusty Weber
sumber
2
Distribusi apa yang Anda gunakan?
Sven

Jawaban:

16

Anda dapat menggunakan perintah mountpoint untuk memastikan mount telah terjadi sebelum Anda menjalankan perintah Anda mis. (Dengan asumsi / abs adalah titik mount)

#!/bin/bash
while true
do
    if mountpoint -q /abs
        then
            /usr/bin/python /abs/path/to/script.py
            break
        fi
    sleep 10
done
user9517
sumber
3
+1 Saya belum pernah mendengar mountpoint- ini sangat berguna!
Sven
@VenW Sama di sini. Saya sekarang memperbarui beberapa skrip dengan ini.
Aaron Copley
Memilih ini sebagai jawaban karena ketika sistem me-reboot, kita bahkan tidak tahu apakah nic dapat me-mount sistem dan mencoba me-mount sistem file sebelum nic siap dapat menjadi bencana.
Rusty Weber
4

Saya tidak yakin apa masalahnya sejak cron dimulai setelah jaringan. (Setidaknya dalam Red Hat dan turunannya.) Apakah mount Anda /etc/fstabdengan _netdevopsi atau di mana?

Cara standar untuk menjalankan sesuatu saat memulai adalah dengan memasukkannya /etc/rc.local. Ini akan dijalankan setelah jaringan diinisialisasi dan semua layanan lainnya dimulai. (Termasuk pemasangan sistem file jarak jauh.)

(Atau adakah alasan untuk hanya menjalankan skrip setelah reboot secara literal?)

Aaron Copley
sumber
Ya bagian tersebut dipasang di fstab. Saya sedang menjalankan di ubuntu, yang berarti jaringan mungkin belum berjalan. etc / rc.local tampaknya menjadi solusi terbaik, tetapi jika @restart ada di crontab, asumsinya adalah ia seharusnya bekerja.
Rusty Weber
1

Berikut ini beberapa ide untuk Anda:

  1. periksa apakah NFS sudah terpasang. Jika tidak, pasang, lalu jalankan skrip Anda:

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

  2. jalankan skrip Anda dalam start()fungsi skrip init NFS:

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

Untuk benar-benar yakin bahwa skrip python dapat dijalankan. Anda harus membungkusnya dengan skrip yang disimpan di penyimpanan lokal untuk memverifikasi bahwa titik pemasangan telah muncul.

Sesuatu seperti (kode pseudo peringatan):

while (!ScriptExists && ErrorCount < 10)
do
    mount /my/mount/point
    sleep 10
    ErrorCount++
done
Zypher
sumber