我们需要在我们的一个 mac 上进行粗略的备份 - 我们需要每天一次将文件从它复制到我们的 windows 文件服务器上,无论是否有人登录它。我可以找到在用户登录并安装 Windows 共享时执行此操作的脚本,但是当他们未登录时我无法找到执行此操作的方法。
那里有知道如何做到这一点的 unix / osx 极客吗?
我们需要在我们的一个 mac 上进行粗略的备份 - 我们需要每天一次将文件从它复制到我们的 windows 文件服务器上,无论是否有人登录它。我可以找到在用户登录并安装 Windows 共享时执行此操作的脚本,但是当他们未登录时我无法找到执行此操作的方法。
那里有知道如何做到这一点的 unix / osx 极客吗?
我强烈建议查看“cron”命令。它允许您在不同时间重复安排任意命令行任务。
没有人登录时运行脚本
要运行无论您是否有用户登录都运行的守护程序,您需要查看 launchd 以管理实际执行备份的脚本。自 Mac OS X 10.4 以来,cron 已被一个名为launchd(手册页)的程序取代,该程序将 cron、init.d、rc 和其他几个实用程序全部组合到一个程序中。
作为参考,launchd 运行启动代理(在用户登录时以用户身份运行)和启动守护程序(无论用户何时登录都运行)。这些任务由可在以下位置之一找到的 xml .plist 文件定义:
有关加载、卸载等的更多信息都可以在手册页上找到。
我发现的最简单的方法是创建一个 shell 脚本来运行您的备份。
然后,您可以加载它并通过将以下 .plist 文件放入
/Library/LaunchDaemons
并运行sudo launchctl load -w /Library/LaunchDaemons/org.example.script.plist
它来运行它以加载它以运行。此外,如果您想编辑或创建已启动的 plist,我建议您查找Lingon的 GUI 以编辑和创建此类 .plist 文件。
备份脚本
一个非常简单的备份脚本可能涉及以下元素:
1)挂载windows文件共享:
例如。
2) 使用 rsync 备份文件。
3) 完成后卸载 windows 文件共享:
例如。
更多信息
mount -t smbfs
可以在它的手册页或man mount上找到。小注意事项
另一方面,应该注意的是,在 Tiger (10.4) 中,StartCalendarInterval 在处理睡眠时有一个相当烦人的错误,该错误已在 Leopard (10.5) 及更高版本中得到修复。
除了 cron 之外,如果您只想保留所有文件的当前副本,rsync 也可能会有所帮助。这是来自Ubuntu论坛的操作指南,它描述的过程与您在 OS X 中所做的非常相似。您可以跳到 rsync 部分,并且可以用 fink 或 macports 代替 aptitude 命令来获取包。
我的说明看起来有点复杂,但是一旦你开始,它应该不会太难。
您需要编写一个脚本来创建挂载点,在该挂载点使用 mount_smbfs 挂载 Windows 服务器,复制文件,然后卸载服务器。如果有用户登录,你必须决定你想要什么行为——你可能不希望他们尝试两次挂载相同的共享。以下是我用于类似任务的脚本中的一些内容(顺便说一下,将每个 bash 注释转换为标题的漂亮格式,O Server Fault 团队):`
如果 [ -e /private/tmp/Volumes ] ; 然后 mkdir /private/tmp/Volumes/Terminal/ 否则 mkdir /private/tmp/Volumes/ mkdir /private/tmp/Volumes/Terminal/ fi
mount_smbfs //用户名:密码@192.168.1.1/InterChk /private/tmp/Volumes/Terminal
如果 [ !-e /private/tmp/Volumes/Terminal/ESXP ] ; 然后退出fi
如果 [ -e /Library/WebServer/Documents/Sophos.old ] ; 然后 rm -r /Library/WebServer/Documents/Sophos.old fi
如果 [ -e /Library/WebServer/Documents/Sophos ] ; 然后 mv /Library/WebServer/Documents/Sophos /Library/WebServer/Documents/Sophos.old fi
mkdir /Library/WebServer/Documents/Sophos
cp -Rp /private/tmp/Volumes/Terminal/ESXP /Library/WebServer/Documents/Sophos/ESXP cp -Rp /private/tmp/Volumes/Terminal/ES9x /Library/WebServer/Documents/Sophos/ES9x cp -Rp / private/tmp/Volumes/Terminal/ESOSX /Library/WebServer/Documents/Sophos/ESOSX cp -Rp /private/tmp/Volumes/Terminal/savlinux /Library/WebServer/Documents/Sophos/savlinux
chown -R _www /Library/WebServer/Documents/Sophos
umount /private/tmp/卷/终端/
rmdir /private/tmp/Volumes/Terminal/ `
希望这有助于您入门。然后使用 cron 或 launchd 设置重复计划,或者如果您愿意,可以将其设置为注销脚本,以便在用户注销时自动备份文件。