eck*_*kza 3 ssh bash scripting rsync
我.sh
从今天早上的某个时候开始编写实际的脚本,而且我有点卡住了.我正在尝试编写一个脚本来检查进程是否正在运行,如果不是则启动它.(我计划每10到15分钟运行一次这个脚本cron
.)
这是我到目前为止所拥有的:
#!/bin/bash
APPCHK=$(ps aux | grep -c "/usr/bin/rsync -rvz -e ssh /home/e-smith/files/ibays/drive-i/files/Warehouse\ Pics/organized_pics imgserv@192.168.0.140:~/webapps/pavlick_container/public/images
")
RUNSYNC=$(rsync -rvz -e ssh /home/e-smith/files/ibays/drive-i/files/Warehouse\ Pics/organized_pics imgserv@192.168.0.140:~/webapps/pavlick_container/public/images)
if [ $APPCHK < '2' ];
then
$RUNSYNC
fi
exit
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
$ ./image_sync.sh
rsync: mkdir "/home/i/webapps/pavlick_container/public/images" failed: No such file or directory (2)
rsync error: error in file IO (code 11) at main.c(595) [Receiver=3.0.7]
rsync: connection unexpectedly closed (9 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(601) [sender=3.0.7]
./image_sync.sh: line 8: 2: No such file or directory
Run Code Online (Sandbox Code Playgroud)
TRTWF就是这样
rsync -rvz -e ssh /home/e-smith/files/ibays/drive-i/files/Warehouse\ Pics/organized_pics imgserv@192.168.0.140:~/webapps/pavlick_container/public/images
从终端窗口运行得很好.
我究竟做错了什么?
grep
电话有两个错误.该模式不应包含换行符.要查找完整的字符串,请使用grep -F 'substring'
或grep -xF 'exact whole line'
.ps | grep
是非常脆弱的.在大多数unices(至少是Solaris,Linux和*BSD)上,使用pgrep:pgrep -f 'PATTERN'
如果有一个正在运行的进程与命令行匹配,则返回true PATTERN
.
$(…)
表示在括号内运行命令并捕获其输出.所以,rsync
作为一旦壳碰到的定义执行RUNSYNC
变量.要存储一个shell代码块,请使用一个函数(下面的例子,虽然你实际上并不需要这里的函数,但你可以直接编写代码).[ $APPCHK < 2 ]
应该是[ $APPCHK -lt 2 ]
:<
表示输入重定向.(在bash中,你也可以写[[ foo < bar ]]
,但这是字符串比较,而不是数字比较.)~/
在远程rsync路径的开头是可选的.此外,-e ssh
默认情况下,除非您的rsync版本真的很旧.exit
在脚本结束时没用,脚本无论如何都会退出.这是一个考虑到上述内容的脚本:
#!/bin/bash
run_rsync () {
rsync -rvz '/home/e-smith/files/ibays/drive-i/files/Warehouse Pics/organized_pics' \
imgserv@192.168.0.140:webapps/pavlick_container/public/images
}
process_pattern='/usr/bin/rsync -rvz /home/e-smith/files/ibays/drive-i/files/Warehouse Pics/organized_pics imgserv@192\.168\.0\.140:webapps/pavlick_container/public/images'
if pgrep -xF "$process_pattern"; then
run_rsync
fi
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1684 次 |
最近记录: |