Crontab em execução antes do nfs montado

7

A execução do Cronjob @reboot retorna que o arquivo no compartilhamento nfs não existe.

Exemplo

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

correio do crontab na inicialização lê "mais ou menos"

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

O script pode ser executado a partir da linha de comando sem problemas.
A teoria é que o cronjob está em execução antes que o mount seja executado.
As perguntas.

  1. Esta teoria está correta?
  2. Existe uma maneira de forçar o trabalho a chorar até que a unidade tenha sido montada? .... Além de apenas colocar um sono 60 no comando. ;) Eu já tentei isso, mas é errático e preciso que o script seja executado 100% do tempo rapidamente.
por Rusty Weber 08.10.2012 / 18:54

4 respostas

12

Você pode usar o comando mountpoint para garantir que a montagem tenha ocorrido antes de executar o comando, por exemplo. (assumindo / abs é o ponto de montagem)

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

Não sei qual é o problema, pois o cron é iniciado após a rede. (Pelo menos no Red Hat e derivados.) Suas montagens estão na opção /etc/fstab with _netdev ou então onde?

A maneira padrão de executar algo na inicialização é incluí-lo em /etc/rc.local . Isso será executado depois que a rede for inicializada e todos os outros serviços forem iniciados. (Incluindo montagem de sistemas de arquivos remotos).

(Ou existe um motivo para apenas executar o script após uma reinicialização literal?)

    
por 08.10.2012 / 19:20
1

Aqui estão algumas ideias para você:

  1. verifique se o NFS está montado. Se não, monte-o e execute seu script:

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

  2. execute seu script na função start() do script de inicialização do NFS:

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

Para ter certeza absoluta de que o script python pode ser executado. Você precisaria envolvê-lo em um script armazenado no armazenamento local para verificar se o ponto de montagem surgiu.

Algo como (pseudo código de aviso):

while (!ScriptExists && ErrorCount < 10)
do
    mount /my/mount/point
    sleep 10
    ErrorCount++
done
    
por 08.10.2012 / 19:11

Tags