命令在计划时无法正常工作

时间:2014-04-04 18:10:52

标签: bash cron

我正在尝试安排一个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结尾的文件,即使是安排。

我在这里做错了吗?

1 个答案:

答案 0 :(得分:1)

您应至少引用$SCRIPT,否则当前 local 目录中的任何.bin文件都将更改您的命令:

output=$(ssh -l $USERNAME $HOST "$SCRIPT")

crontab运行的脚本的当前目录在测试时可能与当前目录不同,从而导致不同的行为。

(要在手动测试时重新创建问题,请在执行touch foo.bin之前运行/opt/test/deleteFiles.sh。)

还要确保指定要在其中运行脚本的shell。在脚本的开头,有一行如下:

#!/bin/bash

这将避免由于不同的默认shell设置引起的差异。