如何解决Python cron 子进程 Popen 抛出 OSError [Errno 2],手动执行时有效
我正在尝试自动化 Python 脚本以连续捕获网络数据包并将其写入文件。该脚本严重依赖 Wireshark 的 dumpcap CLI 命令的使用,并使用子进程 Popen 模块在 shell 中运行该命令。在正常执行期间,脚本会创建一个新目录并开始将网络数据捕获到该新目录。在命令行上手动执行时,脚本运行到完成,但是,当我让 cron 执行作业时,脚本在捕获开始之前终止,并出现以下错误:
Traceback (most recent call last):
File "./netcapture.py",line 19,in <module>
dumpcap = subprocess.Popen(['dumpcap','-i','3','-a','duration:30','-b','duration:10','-w',filepath],cwd=r'/var/tmp/traces/')
File "/usr/lib64/python2.6/subprocess.py",line 642,in __init__ errread,errwrite)
File "/usr/lib64/python2.6/subprocess.py",line 1238,in __execute_child raise child_exception
OSError: [Errno 2] No such file or directory
文件路径变量是
netdata_02_24_2021/trace.pcap
这是新创建的目录的名称和 dumpcap 将网络数据写入的文件名和类型。我在 RHEL 6 上使用 Python 2.6 运行此脚本以供参考。 cron作业语法如下:
0 0 * * * cd /var/tmp/traces/ && python ./netcapture.py &
我知道的事情:
- cron 能够找到并执行脚本
- 脚本执行的当前工作目录是正确的
- subprocess.Popen 在由 cron 执行时工作,因为它在抛出错误之前使用以成功创建
mkdir -p netdata_02_24_2021
在当前工作目录中调用
- 路径对于捕获写入是正确的。我可以手动执行这个脚本,它会识别新目录并写入它
我尝试过的事情:
- 提供所有目录的完整路径
- 将 subprocess.Popen() 调用切换为 subprocess.check_call() 调用
- 在我的 subprocess.Popen() 调用中使用 shell=True 语法
此时,我不确定是什么导致了 cron 的执行问题。任何帮助将不胜感激。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。