首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >smartctl不在cron作业中工作

smartctl不在cron作业中工作
EN

Stack Overflow用户
提问于 2015-06-17 10:43:55
回答 1查看 688关注 0票数 0

我对smartctl有意见

已从5.4版更新到最新的6.4版。没有变化..。同一问题

当直接从命令行运行命令smartctl -H /dev/sda时,它工作良好。

但是,当从cron作业运行命令时,它不能正常工作。在这里,您可以看到cron作业设置。它以root的形式运行

该作业在测试时每60秒运行一次,命令不返回任何内容。只将时间戳写入文件。

但是,如果我按下“立即运行”按钮,那么命令就能工作了?!很奇怪!?在代码中,可以看到输出被写入文件。输出为空

另一件事..。当作业自动化时,只向文件写入一个时间戳。应该写两张时间戳吗?

代码语言:javascript
复制
function check_dev($dev){
    $status_ok = "=== START OF READ SMART DATA SECTION ===\nSMART overall-health self-assessment test result: PASSED";
    
    $output = shell_exec('smartctl -H '.$dev);
    
    file_put_contents('/var/www/hdd_out.txt', gmdate("M d Y H:i:s", time())."\n".$output, FILE_APPEND);
    
    if(strpos($output, $status_ok) !== false){
        echo "$dev OK!\n";
        
        return true;
    }
    else{
        echo "$dev ERROR!\n";
        
        return false;
    }   
}

if(check_dev('/dev/sda') && check_dev('/dev/sdb')){
    $status = 0;
}
else{
    $status = 1;
}

输出文件

代码语言:javascript
复制
Jun 17 2015 10:17:01
Jun 17 2015 10:18:01
Jun 17 2015 10:19:01
Jun 17 2015 10:20:01
Jun 17 2015 10:21:01
Jun 17 2015 10:22:01
Jun 17 2015 10:23:01
Jun 17 2015 10:24:01
Jun 17 2015 10:25:01
Jun 17 2015 10:26:01
Jun 17 2015 10:27:01
Jun 17 2015 10:28:01
Jun 17 2015 10:29:01
Jun 17 2015 10:29:54 # here I manually pressed "Run now"
smartctl 6.4 2014-09-29 r3990 [x86_64-linux-2.6.32-5-amd64] (local build)
Copyright (C) 2002-14, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

Jun 17 2015 10:29:54 # here I manually pressed "Run now"
smartctl 6.4 2014-09-29 r3990 [x86_64-linux-2.6.32-5-amd64] (local build)
Copyright (C) 2002-14, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

Jun 17 2015 10:30:01
Jun 17 2015 10:31:01
Jun 17 2015 10:32:01
Jun 17 2015 10:33:01
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-17 13:25:29

cron运行的用户和环境通常比登录到TTY时所熟悉的环境受限得多。特别是,$PATH环境变量可能是不同的,甚至是空的。

因此,建议使用脚本中调用的任何可执行文件的完整路径。由于cron脚本正在运行,所以在cron任务本身中可以找到php可执行文件,但是在smartctl脚本中可能找不到smartctl

使用smartctl定位到which smartctl的完整路径,然后修改PHP脚本以使用完整路径。这很可能是/usr/bin/smartctl/usr/sbin/smartctl

使用shell_exec()很难从调用的命令中检索错误信息。相反,使用exec()和指定第三个参数$return_var来捕获返回代码以及$output数组可能会更有帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30889246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档