如何设置 NFS 回调以允许编写脚本?

如何设置 NFS 回调以允许编写脚本?

上下文

我有两台服务器:一台 NAS 和一台客户端服务器。它们都是小型机器(Raspberry、OLinuXino),并插入同一个电源板(有一个电源按钮)。

客户端服务器在启动时从 NAS 装载 NFS 卷。

问题

当我打开电源板时,两台服务器同时启动。但当客户端尝试挂载 NFS 卷时,它们尚未可从 NAS 获取。

所以我必须手动安装它们,并且我想自动执行此操作。

我使用 fstab 在 Debian Wheezy 发行版上挂载卷。

nas.local:/media/myshare  /media/myshare nfs defaults 0 0

我将如何解决它

所以我想我可以在 NAS 上添加一个脚本,调用 ssh 命令来告诉客户端“挂载你的 NFS 卷,它们现在已经准备好了!”。

类似ssh -i idFile login@clientServer 'sudo mount -a'来自 NAS 方面的东西。

问题

放置此类脚本的最佳位置是什么?

NFS 挂钩?像回调之类的东西?

额外问题

还是有另一种更好的方法来做到这一点?

答案1

由于多种原因,我会尽力防止失败。一个 cron 作业会检查卷是否已安装,如果未安装则安装它,即可完成此操作。

  1. 使用我将使用以下答案创建脚本检查目录是否用bash安装[关闭]

  2. 对于您正在创建的 bash 脚本中的安装,请使用 Giles 答案修改您的 sudoers 文件以允许 cron 脚本作为 sudo 执行如何在没有密码提示的情况下以 root 身份运行特定程序?。这可能是一个可选步骤,具体取决于您的设置。

  3. 设置您的 cron 作业。你会想要两个。首先是定期检查安装情况,如果没有则安装。这样,如果其中任何一个独立失败,它将恢复在线状态。第二个应该在启动后使用 cron。这个答案会对你有帮助Crontab 作业在@reboot 之后+1 分钟启动

从服务器端:您可以将脚本附加到 NFS 服务本身。您可以编辑服务脚本以在完成后短暂睡眠后执行。 bash 脚本可以遵循以下形式:

sleep 60 && my_mount_script.sh

使用 systemd 你可以等待systemd 在重新启动/关闭或终止其他进程之前等待命令完成以便 nfs.service 启动。替换内容包括删除 Before 部分,然后将 after 服务名称更改为 nfs.service

相关内容