2024-06-16 09:03:54 发布
网友
我安装了CSF(configure safe firewall),它有一个功能,允许您在平均负载事件上执行自定义脚本。在
我的剧本:
##!/usr/bin/env bash iotop -bto --iter=1 2>&1 | mail -s "$HOSTNAME iotop output" incidents@
通过bash shell可以正常工作,但是当由lfd(CSF的监视过程)执行时,我得到以下输出:
有人能解释一下吗?在
通常,当您在自动化命令时遇到问题,这是因为自动运行命令的对象没有定义相同的环境变量(因为没有登录)。不过,我不认为这是事实。我会很快怀疑用户脚本正在运行,因为没有相同的权限。在
我会尝试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会尝试终止已经死掉的进程,并从操作系统获得一个错误。在
popen()
SIGCHLD
iotop
.close()
如果您不能重新配置环境以允许SIGCHLD通过,我认为您将不得不求助于丑陋的黑客攻击。在
将iotop包装在一个脚本中,monkey用一个总是返回相同元组的函数(类似于('64bit', 'ELF')-请参考realarchitecture()的输出)来修补{}应该可以让您继续。在
('64bit', 'ELF')
architecture()
或者,您只需制作platform.py文件的本地副本并直接编辑它,将cron作业的PYTHONPATH设置为指向该新文件。在
platform.py
PYTHONPATH
通常,当您在自动化命令时遇到问题,这是因为自动运行命令的对象没有定义相同的环境变量(因为没有登录)。不过,我不认为这是事实。我会很快怀疑用户脚本正在运行,因为没有相同的权限。在
我会尝试su以CSF的身份运行脚本,并尝试以该用户的身份手动运行它。在
从内部看,它相当于:
为了使},并阻止python获得进程退出的通知。因此,当函数调用
popen()
工作,它必须能够得到SIGCHLD
信号,告诉它一个子进程已退出。似乎执行iotop
的环境有一个自定义的reaper进程,该进程拦截{.close()
时,python会尝试终止已经死掉的进程,并从操作系统获得一个错误。在如果您不能重新配置环境以允许
SIGCHLD
通过,我认为您将不得不求助于丑陋的黑客攻击。在将}应该可以让您继续。在
iotop
包装在一个脚本中,monkey用一个总是返回相同元组的函数(类似于('64bit', 'ELF')
-请参考realarchitecture()
的输出)来修补{或者,您只需制作
platform.py
文件的本地副本并直接编辑它,将cron作业的PYTHONPATH
设置为指向该新文件。在相关问题 更多 >
编程相关推荐