在由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
有什么想法吗?
答案 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中运行时正在读取的特殊字段。我只是一个脚本新手,所以抱歉我的坏脚本=)