2017-02-16 11 views
0

Я написал скрипт, чтобы контролировать пространствокоманды CUT не работает в кронтабе

echo "___________" `date` "___________" 
df | tr -s ' ' $'\t' | cut -f5 > file.txt 
echo `sed 's/Use//g' file.txt` > file.txt 
echo `sed 's/%//g' file.txt` > file.txt 
expression=`cat file.txt | sed -e 's///g'` 
echo $expression 
a=($expression) 
#echo ${a[0]} 
#echo ${a[1]} 
#echo ${a[2]} 
#echo ${a[3]} 
#echo ${a[4]} 
#echo ${a[5]} 
#echo ${a[6]} 
total=`expr ${a[0]} + ${a[1]} + ${a[2]} + ${a[3]} + ${a[4]} + ${a[5]} + ${a[6]}` 
echo $total 
server=`who` 

if [ $total -ge 90 ] 
then 
    echo "greater" 
else 
    echo "Space occupied " $total "%" 
fi 

Когда я запускаю этот скрипт в терминале, он отлично работает. tr и cut команды отлично работают. Но когда я планирую этот скрипт в crontab, команда tr и cut не анализирует вывод команды df. Вот вывод скрипта когда терминал

1 1 96 0 0 4 1 
103 
greater 

вывод сценария, когда он запланирован в хрон

Filesystem$1K-blocks$d$Available$$Mounted$on udev$1945488$4$1945484$1$/dev tmpfs$391332$836$390496$1$/run /dev/sda1$476684304$433659732$18787364$96$/ none$4$0$4$0$/sys/fs/cgroup none$5120$0$5120$0$/run/lock none$1956652$84020$1872632$5$/run/shm none$102400$56$102344$1$/run/user 

Помоги мне!

ответ

1

Не уверен, что я следую тому, что вы пытаетесь получить, но всякий раз, когда вы используете crontab, вы должны использовать полный путь ко всем командам, которые будут использоваться, поскольку путь ко всем может быть недоступен/установлен. Ваш код может быть особенно коротким для:

echo "___________$(/usr/bin/date)___________" 
total=$(/usr/bin/df | /usr/bin/awk 'NR > 1 && NR < 9{s+=$5}END{print s}') 

if ((total >= 90)) 
then 
    echo "greater" 
else 
    echo "Space occupied $total%" 
fi 
+0

Это работает. Спасибо, @grail. Для меня работает полный путь к командам и '#!/Bin/bash' при запуске скрипта. –

Смежные вопросы