我在shell脚本中使用了以下命令:
echo "1" > log.txt
if [ `ifconfig eth0 | grep 'inet addr' | cut -d ":" -f 2 |
awk {'print $1'}` = 'ipaddress' ] && [ `whoami` = 'userid' ]; then
echo "2" >> log.txt
crontab -l > Cron.txt
echo "3" >> log.txt
fi
手动运行时脚本运行正常,但通过cron计划时,脚本运行正常 坚持这个IF。
cron entry: 31 11 * * * /home/abc/cron_backup.sh
log.txt中的输出手动运行:在log.txt中打印1,2,3 cron:在log.txt中打印1
答案 0 :(得分:0)
我建议将命令解释器行#作为脚本的第一行!确保sh会运行它
之后,您是否考虑使用双括号语法[[]]?
#!/bin/sh
echo "1" > log.txt
if [[ `ifconfig eth0 | grep 'inet addr' | cut -d ":" -f 2 |
awk {'print $1'}` = 'ipaddress' ]] && [[ `whoami` = 'userid' ]]; then
echo "2" >> log.txt
crontab -l > Cron.txt
echo "3" >> log.txt
fi
答案 1 :(得分:0)
问题可能出在ifconfig,grep,cut awk和whoami调用上。当您从命令行运行它时,您将获得具有PATH设置的配置文件。
从cron运行时,它没有您的个人资料。如果你修改PATH变量以指向这些程序的位置,那么从cron运行时你就不会有这种变化。
尝试为每个命令添加完整路径,并查看从cron运行时有什么不同。