已经
写了几个关于 CRON 的问题和答案,但我找不到解决这种情况的问题和答案;如果通过命令行调用,以下示例脚本将成功运行:
LogDir=/usr/local/gtpsft/scripts/tmp
DATE=`date +%Y%m%d`
LogMsg ()
{
#set -xv
CODE=$1
MSG=$2
echo "$(date +"%H:%M:%S") : ${CODE} : ${MSG}" >> ${LogDir}/${DATE}_XXXX_GCF_Restart.log
}
#fn=TimeTests.sh
current=`perl -le 'print int(time)'`
file_time=$(ls -E TimeTests.sh | awk '{ print $6 " " $7 }'| sed -e 's/-/ /g' -e 's/:/ /g' -e 's/..*$//')
epoch_file=`gawk -v t="${file_time}" 'BEGIN { print mktime(t)}'`
LogMsg INFO "Current EPOCH time: ${current}";
LogMsg INFO "File time stamp in FULL: ${file_time}";
LogMsg INFO "File time stamp in EPOCH: ${epoch_file}";
但台词:
file_time=$(ls -E TimeTests.sh | awk '{ print $6 " " $7 }'| sed -e 's/-/ /g' -e 's/:/ /g' -e 's/..*$//')
如果这是从 cron 运行的,则无法执行(变量中不存储任何值),我尝试将完整的 PATH 添加到脚本中,甚至在脚本中调用配置文件,即:
LD_LIBRARY_PATH=/usr/local/lib/gcc:/lib:/usr/lib:/usr/local/lib:/usr/perl5/lib:/opt/hpnpl/lib:/usr/share/lib:/usr/local/samba/lib
PATH=/usr:/usr/bin:/sbin:/opt/sfw/bin:/usr/sbin:/etc/perl5/bin:/usr/local/bin:/opt/sfw/cups/bin:/lib:/usr/lib:/usr/share/lib:/usr/ccs/bin:/usr/local/samba/bin:/usr/local/sbin
/bin/bash /etc/profile
但是当脚本从cron运行时,结果保持不变,我尝试使用其他命令来获取EPOCH文件时间戳,即:
stat -c %Y TimeTests.sh
但是从 CRON 运行时结果保持不变......对我所缺少的任何建议将不胜感激。
谢谢
行的问题
file_time=$(ls -E TimeTests.sh | awk '{ print $6 " " $7 }'| sed -e 's/-/ /g' -e 's/:/ /g' -e 's/..*$//')
是不包括 TimeTests.sh 的路径,因此当脚本由 cron 触发时找不到 TimeTests.sh,这是通过添加完整路径来修复的,即:
file_time=$(ls -E /usr/local/gtpsft/scripts/tmp/TimeTests.sh | awk '{ print $6 " " $7 }'| sed -e 's/-/ /g' -e 's/:/ /g' -e 's/..*$//')