iotop脚本无法通过自定义脚本执行工作

2024-06-16 09:03:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我安装了CSF(configure safe firewall),它有一个功能,允许您在平均负载事件上执行自定义脚本。在

我的剧本:

##!/usr/bin/env bash
iotop -bto --iter=1 2>&1 | mail -s "$HOSTNAME iotop output" incidents@

通过bash shell可以正常工作,但是当由lfd(CSF的监视过程)执行时,我得到以下输出:

^{pr2}$

有人能解释一下吗?在


Tags: 功能env脚本bashbinconfigureusr事件
2条回答

通常,当您在自动化命令时遇到问题,这是因为自动运行命令的对象没有定义相同的环境变量(因为没有登录)。不过,我不认为这是事实。我会很快怀疑用户脚本正在运行,因为没有相同的权限。在

我会尝试su以CSF的身份运行脚本,并尝试以该用户的身份手动运行它。在

从内部看,它相当于:

import os
import sys

f = os.popen('file -b "%s" 2> %s' % (sys.executable, os.devnull))
f.read()
f.close()

为了使popen()工作,它必须能够得到SIGCHLD信号,告诉它一个子进程已退出。似乎执行iotop的环境有一个自定义的reaper进程,该进程拦截{},并阻止python获得进程退出的通知。因此,当函数调用.close()时,python会尝试终止已经死掉的进程,并从操作系统获得一个错误。在

如果您不能重新配置环境以允许SIGCHLD通过,我认为您将不得不求助于丑陋的黑客攻击。在

iotop包装在一个脚本中,monkey用一个总是返回相同元组的函数(类似于('64bit', 'ELF')-请参考realarchitecture()的输出)来修补{}应该可以让您继续。在

或者,您只需制作platform.py文件的本地副本并直接编辑它,将cron作业的PYTHONPATH设置为指向该新文件。在

相关问题 更多 >