Crontab in esecuzione prima di nfs montato


9

L'esecuzione di Cronjob @reboot restituisce che il file sulla condivisione nfs non esiste.

Esempio

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

la posta di crontab all'avvio recita "più o meno"

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

Lo script può essere eseguito dalla riga di comando senza problemi. La
teoria è che il cronjob è in esecuzione prima dell'esecuzione del mount.
Le domande.

  1. Questa teoria è corretta?
  2. C'è un modo per forzare il lavoro a gemere fino a quando l'unità è stata montata? .... Oltre a mettere un sonno 60 nel comando. ;) L'ho già provato, ma è incostante e ho bisogno che la sceneggiatura venga eseguita il 100% delle volte rapidamente.

2
Quale distribuzione stai usando?
Sven

Risposte:


16

È possibile utilizzare il comando mountpoint per assicurarsi che il mount abbia avuto luogo prima di eseguire il comando, ad es. (Supponendo / abs è il punto di mount)

#!/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 Non ne ho mai sentito parlare mountpoint- questo è abbastanza utile!
Sven

@SvenW Lo stesso qui. Sto aggiornando una manciata di script con questo.
Aaron Copley,

Selezionando questa come risposta dal momento che durante il riavvio del sistema, non sappiamo nemmeno se il nic è pronto per montare il sistema e tentare di montare il file system prima che il nic sia pronto può essere disastroso.
Rusty Weber,

4

Non sono sicuro di quale sia il problema poiché cron inizia dopo il networking. (Almeno in Red Hat e derivati.) I tuoi supporti sono disponibili /etc/fstabcon l' _netdevopzione oppure dove?

Il modo standard per eseguire qualcosa all'avvio è includerlo in /etc/rc.local. Questo verrà eseguito dopo l'inizializzazione della rete e l'avvio di tutti gli altri servizi. (Incluso il montaggio di file system remoti.)

(O c'è un motivo per eseguire lo script solo dopo un riavvio letterale?)


Sì, la condivisione è montata in fstab. Stavo correndo in Ubuntu, il che significa che la rete potrebbe non essere stata in esecuzione. etc / rc.local sembra essere la soluzione migliore, ma se @restart esiste in crontab, il presupposto è che dovrebbe funzionare.
Rusty Weber,

1

Ecco alcune idee per te:

  1. controlla se NFS è montato. In caso contrario, montalo, quindi esegui il tuo script:

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

  2. eseguire lo script nella start()funzione dello script init NFS:

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

1

Per essere assolutamente sicuri che lo script python sia in grado di funzionare. Dovresti avvolgerlo in uno script archiviato nella memoria locale per verificare che il punto di montaggio sia arrivato.

Qualcosa di simile (avviso pseudo codice):

while (!ScriptExists && ErrorCount < 10)
do
    mount /my/mount/point
    sleep 10
    ErrorCount++
done
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.