我正在尝试安排一个bash脚本,该脚本将删除远程计算机中的某些文件。
LOCATION=/var/ftp/pub/test/
SCRIPT="cd $LOCATION; rm -rf *.bin*"
output=$(ssh -l $USERNAME $HOST $SCRIPT)
Files in the remote server:
linux_12345.bin
linux_56743.bin.sig
linux_74635.bin
当我在shell中运行脚本时,它会正确删除文件,但是如果我在cron中安排它,它就不会删除文件。即使我尝试了linux_ *它也没有用。看起来如果它以*结尾,它就不能用于调度。
但是,如果我使用* .bin,它会删除所有以.bin结尾的文件,即使是安排。
我在这里做错了吗?
答案 0 :(得分:1)
您应至少引用$SCRIPT
,否则当前 local 目录中的任何.bin文件都将更改您的命令:
output=$(ssh -l $USERNAME $HOST "$SCRIPT")
crontab运行的脚本的当前目录在测试时可能与当前目录不同,从而导致不同的行为。
(要在手动测试时重新创建问题,请在执行touch foo.bin
之前运行/opt/test/deleteFiles.sh
。)
还要确保指定要在其中运行脚本的shell。在脚本的开头,有一行如下:
#!/bin/bash
这将避免由于不同的默认shell设置引起的差异。