我有这个 bash 脚本并通过 cron 定期运行:
#!/bin/bash
RSYNC=/usr/bin/rsync
SSH=/usr/bin/ssh
KEY=/Users/admin/Documents/Backup/rsync-key
RUSER=philosophy
RHOST=example.com
RPATH=data/
LPATH="/Volumes/G Technology G Speed eS/Backup"
LOCKFILE=/Users/admin/Documents/backup.isrunning
if [ ! -e $LOCKFILE ]; then
touch $LOCKFILE
$RSYNC -avz --delete --progress -e "$SSH -i $KEY" "$LPATH" $RUSER@$RHOST:$RPATH
rm $LOCKFILE
else
echo "Rsync - Backup still running"
fi
Run Code Online (Sandbox Code Playgroud)
备份可能需要任何时间,从几分钟到几天不等,如果我每 6 小时通过 cron 运行一次备份,我不想要的是同时运行的两个实例。所以我所做的是创建了一个简单的锁定机制。但我担心如果脚本中途终止,无论出于何种原因,锁定文件总是会在那里并且备份例程不会运行。
有没有办法增强它以更好地防呆?
谢谢
斯科特
编辑: 由于以下答案,我现在正在使用的最终 bash 脚本:
#!/bin/bash
RSYNC=/usr/bin/rsync
SSH=/usr/bin/ssh
KEY=/Users/admin/Documents/Backup/rsync-key
RUSER=philosophy
RHOST=example.com
RPATH=data/
LOCKFILE=/Users/admin/Documents/Backup/backup.isrunning
if [ ! -e $LOCKFILE ]
then
echo $$ >"$LOCKFILE"
else
PID=$(cat "$LOCKFILE") …
Run Code Online (Sandbox Code Playgroud) 我最近问了这个问题:How to set Mac server to use different Gateway for internet bound traffic
给出的答案有效,但向我提出了另一个我在该问题中没有明确说明的问题。
这是我的网络布局:http : //www.philosophydesign.com/downloads/officenetwork2.png
目前,外部工作人员使用现有 Internet 1 链接上的一些服务。这些服务由 Mac 服务器托管。如果我将 Mac 服务器的网关更改为第二个调制解调器,那么这些外部工作人员将无法使用这些服务。
现在我不知道如何解决这个问题。我希望在 Mac 服务器转到异地 rsync 数据时使用第二个链接,但其他所有内容都使用链接一。我该怎么做呢?
谢谢
斯科特
编辑:这已通过将 Mac 服务器上的默认网关设置为 192.168.1.254 解决,从而使网络上的所有内容保持原样。但是为了让 Mac 服务器使用另一个链接进行 rsync,我添加了一条到 Mac 服务器的路由,以便通过第二个网关将流量路由到 rsync 服务器。
sudo route add -net {server IP's}/{Netmask} 192.168.1.1
Run Code Online (Sandbox Code Playgroud)
我已经授予了 gravyface 的答案,因为他将我指向有关如何使这条路线在 Mac 中持久化的帖子