cron中的echo $变量无效

时间:2015-07-27 15:02:09

标签: linux bash shell cron

在由cron运行时无法打印以下结果。我在/ usr / local / bin / test

下有一个脚本名称
#!/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

ARAW=`date +%y%m%d`

NAME=`hostname`

TODAY=`date '+%D %r'`

cd /directory/bar/foo/
VARR=$(ls -lrt /directory/bar/foo/ | tail -1 | awk {'print $8'} | ls -lrt `xargs` | grep something)

echo "Resolve2 Backup" > /home/user/result.txt

echo " " >> /home/user/result.txt

echo "$VARR" >> /home/user/result.txt

mail -s "Result $TODAY" email@email.com < /home/user/result.txt

我在/etc/cron.d/test中将其配置为每隔凌晨1点运行一次:

00 1 * * * root /usr/local/bin/test

当我在命令行中手动运行时

# /usr/local/bin/test

我得到了完整的价值。但是当我让cron完成工作时,它永远不会显示echo "$VARR" >> /home/user/result.txt

的部分

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

VARR=$(ls -lrt /directory/bar/foo/ | tail -1 | awk {'print $8'} | ls -lrt `xargs` | grep something)

ls -ltr /path/to/dir包含输出文件名部分中的目录。然后,您使用此输出再次致电ls,这将显示在当前目录中,而不是/path/to/dir中。

在cron中,您当前的目录可能是/,在您的手动测试中,我打赌您当前的目录是/path/to/dir

这是另一种在发出完整路径名的目录中查找最新文件的方法:

stat -c '%Y %n' /path/to/dir/* | sort -nr | head -1 | cut -d" " -f 2-

需要GNU stat,请检查您的手册页以获取正确的系统调用。

我认为你的VARR调用可以是:

latest_dir=$(stat -c '%Y %n' /path/to/dir/* | sort -nr | head -1 | cut -d" " -f 2-)
interesting_files=$(ls -ltr "$latest_dir"/*something*)

然后,不需要临时文件:

{
    echo "Resolve2 Backup"
    echo
    echo "$interesting_files"
} |
mail -s "Result $TODAY" email@email.com

答案 1 :(得分:0)

感谢您的所有提示和回复。我解决了我的问题。问题是8美元和9美元的输出。我不知道在cron中运行时正在读取的特殊字段。我只是一个脚本新手,所以抱歉我的坏脚本=)