我正在尝试编写一个执行以下操作的脚本
验证复制的文件 如果文件复制成功删除源文件
我只希望脚本尝试几次,如果它违反了nas主机它应该放弃并在下次运行脚本时尝试。我想每2小时运行一次脚本。在山狮中已经移除了crontab接缝。
当我把它写下来时,我意识到它比我最初想的要复杂一点。
首先关于安装nfs共享,如果你弹出已安装的nfs共享,则在OsX中删除/ Volumes中的文件夹。如果nas可用,那么确保nfs共享的最佳方法是什么?这可能是在脚本之外处理的? 如果我手动挂载nfs共享,我将需要创建/ Volumes / media,这将导致如果我使用gui挂载共享将使用/ Volumes / media-1 / sins / Volumes / media vill已经存在。
关于通过名字查杀过程我无法知道PID,我尝试使用linux命令我发现:
杀死ps -ef | grep bitcasa | grep -v grep | awk ‘{print $2}’
这不起作用。
我不知道如何检查是否所有文件都被成功复制,也许rsync可以解决这个问题?
我已经开始使用(未经测试)
#check if bitcasa is running (if file exist)
if [ -f /Volumes/Bitcasa\ Infinite\ Drive/file.ext ]
then
rsync -avz /Users/username/source /Volumes/Bitcasa\ Infinite\ Drive/destination/
else
#Bitcasa might have stopped, check if process i running, kill if it is, then start bitcasa
fi
#Check if nfs share is mounted (if file exist)
if [ -f /Volumes/media/file.ext ]
then
rsync -avz /Users/username/source /Volumes/media/
fi
else
#nfs share (192.168.1.106:/media/) need to be mounted to /Volumes/media
我自己会做更多的工作,但我知道我需要帮助。
或者我这样做是为了复杂吗?也许备份程序可以做到这一点?
答案 0 :(得分:1)
对于kill ... ps
问题,您可以使用killall
来杀死具有给定名称的所有进程
killall bitcasa
或查看man ps
并使用用户定义的格式,这样可以简化选择
ps -o pid,comm | awk '/bitcasa/ { print $1; }' | xargs kill
对于nas,如果您可以登录并安装rsync和ssh(或已安装它),则无需安装任何内容。您可以将192.168.1.106:/media/
作为rsync的目标,rsync将执行所有必要的操作。
在任何情况下,首先检查并在必要时安装,然后在所有设置正确而不是相反的情况下启动rsync
if [ ! -f "/Volumes/Bitcasa Infinite Drive/file.ext" ]; then
# kill bitcasa, restart bitcasa
fi
rsync -avz /Users/username/source "/Volumes/Bitcasa Infinite Drive/destination/"
同样适用于
if [ ! -f "/Volumes/media/file.ext" ]; then
# mount nas nfs share
fi
rsync -avz /Users/username/source "/Volumes/media/"
或者你的nas上有rsync和ssh,只需
rsync -avz /Users/username/source 192.168.1.106:/media/