Shell脚本(使用top命令)无法在cronjob中运行

时间:2015-09-23 09:31:17

标签: linux bash shell cron crontab

Cron表达:

# m h dom mon dow command */1 * * * * /home/sysadmin/sample.sh

Shell脚本内容:

#!/bin/bash
clear
Vardate=`date`
topresult=`top -n 1| grep Cpu`
# CPUStatus=$Vardate"\t"$topresult
# echo $CPUStatus >> /tmp/data.log
echo $Vardate"   "$topresult >> /tmp/data.log

当我手动执行脚本时,我得到了所需的输出。这是:

Wed Sep 23 02:42:47 MDT 2015   Cpu(s): 0.3%us, 0.3%sy, 0.0%ni, 99.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st

但是当cronjob执行它时,输出如下:

Wed Sep 23 02:42:47 MDT 2015 

这可能是什么原因?

2 个答案:

答案 0 :(得分:2)

使用top"批次"模式。

取代:

topresult=`top -n 1| grep Cpu`

使用:

topresult=`top -b -n 1| grep Cpu`
  

-b:批处理模式操作   在批量模式'中开始,这对于将输出从顶部发送到其他程序或文件非常有用。   在此模式下,top将不接受输入并在迭代之前运行   限制你使用' -n'命令行选项或直到被杀死。

来源:http://linux.die.net/man/1/top

答案 1 :(得分:0)

您可以使用此脚本:

def msgbox(self,hwnd,msg,thid,pid):
        MB_OK = 0x0
        MB_OKCXL = 0x01
        MB_YESNOCXL = 0x03
        MB_YESNO = 0x04
        MB_HELP = 0x4000
        ICON_EXLAIM=0x30
        ICON_INFO = 0x40
        ICON_STOP = 0x10
        MB_TOPMOST=0x40000
        MB_SYSTEMMODAL=0x1000
        """
                HEX VALUE LINK
        https://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm
        """
        writeLogs = WriteLogs(
                    pathLog = app_config['path_logs'] +"\\"+strftime("%Y_%m_%d")+".log",
                    timedate = time.strftime("%m/%d/%Y %I:%M:%S %p")
                    )
        writeLogs.appendLogA(msg)
        ctypes.windll.user32.MessageBoxA(hwnd, msg+str(operatorMessage), "[Error]", MB_OK | ICON_STOP | MB_SYSTEMMODAL)