运行 Cronjob @reboot 返回 nfs 共享上的文件不存在。
例子
@reboot python /abs/path/to/script.py
启动时 crontab 发送的邮件显示“或多或少”
/usr/bin/python can't open file "/abs/path/to/script.py": [Error No. 2] No such file or folder.
脚本可以从命令行运行,没有任何问题。
理论上,cronjob 在运行 mount 之前就已经运行了。
问题是。
- 这个理论正确吗?
- 有没有办法强制作业运行直到驱动器安装完成?......除了在命令中输入 sleep 60 之外。;) 我已经尝试过了,但是它时好时坏,我需要脚本能够快速运行 100% 的时间。
答案1
您可以使用挂载点命令以确保在执行命令之前已完成挂载,例如(假设 /abs 是挂载点)
#!/bin/bash
while true
do
if mountpoint -q /abs
then
/usr/bin/python /abs/path/to/script.py
break
fi
sleep 10
done
答案2
我不确定问题是什么,因为 cron 在联网后启动。(至少在 Red Hat 和衍生产品中。)您的挂载是在/etc/fstab
选项中_netdev
还是在其他地方?
在启动时执行某些操作的标准方法是将其包含在内/etc/rc.local
。这将在网络初始化和所有其他服务启动后运行。(包括安装远程文件系统。)
(或者是否有理由仅在重新启动后执行脚本?)
答案3
以下是一些建议:
检查 NFS 是否已安装。如果没有,请安装它,然后运行脚本:
[ ! -f /abs/path/to/script.py ] && mount -t nfs device dir && python /abs/path/to/script.py
start()
在NFS 初始化脚本的功能中运行您的脚本:echo -n $"Starting NFS mountd: " daemon rpc.mountd $RPCMOUNTDOPTS RETVAL=$? echo [ $RETVAL -ne 0 ] && exit $RETVAL || python /abs/path/to/script.py
答案4
要绝对确保 Python 脚本能够运行。您需要将其包装在本地存储中的脚本中,以验证挂载点是否已出现。
类似于(警告伪代码):
while (!ScriptExists && ErrorCount < 10)
do
mount /my/mount/point
sleep 10
ErrorCount++
done