我正在尝试创建由cron运行的脚本,以创建包含子文件夹的多个文件夹。
DATE=`date +%Y-%m-%d`
IP_ADDR=`ifconfig | grep -v '127.0.0.1' | sed -n 's/.*inet addr:\([0-9.]\+\)\s.*/\1/p'`
/bin/mkdir -p /mnt/db-backup/12/$DATE/$IP_ADDR/
如果我手动运行此脚本,则会按预期创建所有内容。当cron子目录运行脚本时,不会创建$ IP_ADDR并且没有错误。
答案 0 :(得分:1)
我怀疑/sbin
不是cron作业运行环境的PATH的一部分。您应该指定ifconfig
命令的完整路径:
IP_ADDR=$(/sbin/ifconfig | grep -v '127.0.0.1' | sed -n 's/.*inet addr:\([0-9.]\+\)\s.*/\1/p')
使用$()
进行命令替换也是一种更好的做法(一般情况下)。
答案 1 :(得分:0)
尝试使用调试模式:
set -x
DATE=`date +%Y-%m-%d`
IP_ADDR=`ifconfig | grep -v '127.0.0.1' | sed -n 's/.*inet addr:\([0-9.]\+\)\s.*/\1/p'`
/bin/mkdir -p /mnt/db-backup/12/$DATE/$IP_ADDR/
set +x
然后,将您的cron的输出重定向到一个文件并查看,您应该在其中找到有用的信息。
答案 2 :(得分:0)
你并不遥远,但有几个可能导致问题的订购警告。许多系统具有ifconfig
输出行的不同格式。一些人使用inet xxx.xxx.xxx.xxx
,另一些人使用inet addr:xxx.xxx.xxx.xxx
。 (这是最常见的两个)。您可能还需要处理存在多个有线inet接口(框中有2个以上NIC)的情况。但是,如果您只有1个NIC,则可以尝试以下操作来处理常见的ifconfig
格式:
DATE=`date +%Y-%m-%d`
IP_ADDR=$(ifconfig |
grep -v '127.0.0.1' |
grep -E 'inet[ ](addr:)*[0-9]{1,3}([.][0-9]{1,3}){3}' |
sed -e 's/^.*inet \(addr:\)*//' -e 's/ .*$//')
/bin/mkdir -p /mnt/db-backup/12/$DATE/$IP_ADDR/
或将IP_ADDR
写成一行:
IP_ADDR=$(ifconfig | grep -v '127.0.0.1' | grep -E 'inet[ ](addr:)*[0-9]{1,3}([.][0-9]{1,3}){3}' | sed -e 's/^.*inet \(addr:\)*//' -e 's/ .*$//')