在nfs挂载之前运行的Crontab

运行Cronjob @reboot返回nfs共享上的文件不存在。

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

启动时从crontab发来的邮件读取“或多或less”

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

脚本可以从命令行运行,没有问题
理论上说,在mount已经运行之前,cronjob正在运行。
问题。

  1. 这个理论是正确的吗?
  2. 有没有办法强制这个工作,直到驱动器已经挂起wa?? ….除了在命令中join睡眠60以外。 ;)我已经尝试过了,但是碰到并错过了,我需要这个脚本快速运行100%的时间。

您可以使用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 

我不确定cron从networking开始后出现了什么问题。 (至less在Red Hat和衍生产品中)。你是用/etc/fstab _netdev选项挂载在/etc/fstab还是在哪里?

启动时执行的标准方法是将其包含在/etc/rc.local 。 这将在networking初始化和所有其他服务启动后运行。 (包括安装远程文件系统。)

(还是有一个理由,只是在文字重新启动后执行脚本?)

以下是您的一些想法:

  1. 检查NFS是否被挂载。 如果没有,挂载它,然后运行你的脚本:

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

  2. 在NFS init脚本的start()函数中运行脚本:

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

要绝对确定python脚本能够运行。 您需要将其包装在存储在本地存储上的脚本中,以validation安装点已经启动。

像(警告伪代码):

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