服务器上有个定时任务,执行结果输出到out.txt中以便查看,类似下行这样的:
*/5 * * * * /shell/runscript.sh >> /shell/out.txt
runscript.sh中执行script.sh,完成后删除。
/shell目录下的所有文件不定期的通过rsync –delete同步过去。
结果发现如果script在5分钟内无法执行完毕的话,cron会重复执行……
考虑到rsync过来的时候out.txt已经被删除掉了决定在runscript.sh前加上一段[[ -f out.txt ]] && exit
结果发现script一直无法运行了。
想想原来是cron每5分钟都会去生成out.txt,只不过当空闲的时候,这个out.txt是空文件而已。
修改判断为[[ -s out.txt ]] && exit
成功。
其实当文件存在的情况下,shell的条件判断还有很多很多种可能,列表如下:
-b file 若文件存在且是一个块特殊文件,则为真
-c file 若文件存在且是一个字符特殊文件,则为真
-d file 若文件存在且是一个目录,则为真
-e file 若文件存在,则为真
-f file 若文件存在且是一个规则文件,则为真
-g file 若文件存在且设置了SGID位的值,则为真
-h file 若文件存在且为一个符合链接,则为真
-k file 若文件存在且设置了”sticky”位的值
-p file 若文件存在且为一已命名管道,则为真
-r file 若文件存在且可读,则为真
-s file 若文件存在且其大小大于零,则为真
-u file 若文件存在且设置了SUID位,则为真
-w file 若文件存在且可写,则为真
-x file 若文件存在且可执行,则为真
-o file 若文件存在且被有效用户ID所拥有,则为真