La ejecución de Cronjob @reboot devuelve que el archivo en nfs share no existe.
Ejemplo
@reboot python /abs/path/to/script.py
el correo de crontab en el inicio dice "más o menos"
/usr/bin/python can't open file "/abs/path/to/script.py": [Error No. 2] No such file or folder.
El script se puede ejecutar desde la línea de comandos sin problemas. La
teoría es que el cronjob se está ejecutando antes de que se haya ejecutado el montaje.
Las preguntas.
- ¿Es correcta esta teoría?
- ¿Hay alguna forma de obligar al trabajo a llorar hasta que se haya montado la unidad? .... Aparte de simplemente dormir 60 en el comando. ;) Ya lo intenté, pero es impredecible y necesito que el script se ejecute el 100% del tiempo rápidamente.
Respuestas:
Puede usar el comando mountpoint para asegurarse de que el montaje se haya realizado antes de ejecutar su comando, por ejemplo (suponiendo que / abs es el punto de montaje)
fuente
mountpoint
esto, ¡esto es bastante útil!No estoy seguro de cuál es el problema ya que cron comienza después de la conexión en red. (Al menos en Red Hat y derivados). ¿Están sus monturas
/etc/fstab
con_netdev
opción o, de lo contrario, dónde?La forma estándar de ejecutar algo al inicio es incluirlo
/etc/rc.local
. Esto se ejecutará después de que se inicialice la red y se inicien todos los demás servicios. (Incluyendo el montaje de sistemas de archivos remotos).(¿O hay una razón para ejecutar solo el script después de un reinicio literal?)
fuente
Aquí hay algunas ideas para ti:
compruebe si NFS está montado. Si no, móntelo, luego ejecute su script:
[ ! -f /abs/path/to/script.py ] && mount -t nfs device dir && python /abs/path/to/script.py
ejecute su script en la
start()
función del script de inicio NFS:fuente
Para estar absolutamente seguro de que el script de Python puede ejecutarse. Debería envolverlo en una secuencia de comandos almacenada en el almacenamiento local para verificar que el punto de montaje ha surgido.
Algo como (pseudocódigo de advertencia):
fuente