上下文
我有两台服务器:一台 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 作业会检查卷是否已安装,如果未安装则安装它,即可完成此操作。
使用我将使用以下答案创建脚本检查目录是否用bash安装[关闭]
对于您正在创建的 bash 脚本中的安装,请使用 Giles 答案修改您的 sudoers 文件以允许 cron 脚本作为 sudo 执行如何在没有密码提示的情况下以 root 身份运行特定程序?。这可能是一个可选步骤,具体取决于您的设置。
设置您的 cron 作业。你会想要两个。首先是定期检查安装情况,如果没有则安装。这样,如果其中任何一个独立失败,它将恢复在线状态。第二个应该在启动后使用 cron。这个答案会对你有帮助Crontab 作业在@reboot 之后+1 分钟启动
从服务器端:您可以将脚本附加到 NFS 服务本身。您可以编辑服务脚本以在完成后短暂睡眠后执行。 bash 脚本可以遵循以下形式:
sleep 60 && my_mount_script.sh
使用 systemd 你可以等待systemd 在重新启动/关闭或终止其他进程之前等待命令完成以便 nfs.service 启动。替换内容包括删除 Before 部分,然后将 after 服务名称更改为 nfs.service