在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Linux/ crontab 定時執(zhí)行 bash 腳本報錯:[: -gt: unary ope

crontab 定時執(zhí)行 bash 腳本報錯:[: -gt: unary operator expected

#!/bin/sh  
filesize=`ls -l nohup.out | awk '{ print $5 }'`
echo "`date +%Y-%m-%d_%H:%M:%S` fileSize: $filesize bit" >> clearNohup.log
if [ $filesize -gt 1073741824 ]
then
    echo "`date +%Y-%m-%d_%H:%M:%S` $filesize bigger than 1G, we will back up and clear..." >> clearNohup.log
    cp -f nohup.out nohup.out.bak
    > nohup.out
    echo "`date +%Y-%m-%d_%H:%M:%S` file back up and claer over!" >> clearNohup.log
else
    echo "`date +%Y-%m-%d_%H:%M:%S` $filesize less than 1G,do nothing!" >> clearNohup.log
fi

手動執(zhí)行時候沒有報錯,正常執(zhí)行;在crontab執(zhí)行時候一直在報錯.
系統(tǒng)是centOS6
報錯:
clearNohup.sh: line 4: [: -gt: unary operator expected
求大神指點!

回答
編輯回答
青檸

把這句:

filesize=`ls -l nohup.out | awk '{ print $5 }'`

改為這樣:

filesize=`ls -l /absolute/path/to/nohup.out | awk '{ print $5 }'`

要注意的是 crontab 的環(huán)境變量和我們的賬號都不一樣, 和 root 的環(huán)境變量也不一樣.
類似普通用戶會先加載 ~/.bashrc 或者 /etc/profile, crontab 則會在運行時加載 /etc/crontab 導(dǎo)入其環(huán)境變量.
而你的問題還不是環(huán)境變量的問題. 但類似. 用 crontab 執(zhí)行, 最好腳本內(nèi)都用絕對路徑.

另外, 即使你第4行過了, 下面幾個使用相對路徑的地方仍然會出錯的.

另外, 統(tǒng)計文件大小為何不用 du 命令, 用 ls 連管道再解析多費事啊.

2018年5月11日 10:28
編輯回答
嘟尛嘴

重現(xiàn):

# filesize可能為空
filesize=

可以改做(基于 #!/usr/bin/env bash):

  • filesize=${$(ls -l nohup.out | awk '{ print $5 }'):-0}
  • 或者 增加邏輯 [ -z "$filesize" ] && filesize=0

經(jīng)其他答案提醒 ls -l nohup.out | awk '{ print $5 }' 管道前的ls命令可能出錯,可以加上 set -eo pipefail以及早退出

2018年4月16日 18:50