使用crontab的Python子进程

编剧

我试图使用crontab每分钟运行一次test.py,它使用一个参数调用(在一些其他函数之后)test2.py。当我在终端中运行“ python3 test.py”时,在任务管理器中看到了test2.py。当我使用crontab时,情况并非如此。正如我在终端中看到的那样,Test.py确实运行。所有文件都在/ root /中。

Crontab:

PATH=/root
* * * * * /usr/bin/flock -n /tmp/5.lockfile /usr/bin/python3 /root/test.py > /dev/pts/3

Test.py:

import subprocess
import os
import time

print(os.environ['PATH']) #Gives \root

#Three different methods, doesn't work:
subprocess.call("python3 /root/test2.py 1", shell=True) 
subprocess.Popen("python3 test2.py 1", stdout=subprocess.PIPE, shell=True, preexec_fn=os.setsid)
os.system("test2.py 1")

time.sleep(30)
让·弗朗索瓦·法布尔

可能是python3不在运行crontab的用户的路径中。因此,您必须使脚本更加安全。

您可以考虑不使用shell=True和字符串命令行:这是不正确的做法,并会导致问题(例如引号以及安全性问题)

无论系统路径sys.executable用于查找当前解释器并创建参数列表,以免将来出现问题(例如包含特殊字符的参数),该方法都将起作用

subprocess.call([sys.executable,"/root/test2.py","1"])

sys.executable是当前正在运行脚本的解释器的完整路径,因此可以保证找到它。其余参数不取决于用户(权限除外)

此外,或许检查的返回码subprocess.call,或如果呼叫获得成功,通过更换subprocess.check_call

另一种方法是导入test2并调用一个函数(如果有)。那不会创建另一个进程,但是可能没关系,它具有优点(例如:允许返回python类型,而不破坏异常链…)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

crontab python子进程和服务重启

来自分类Dev

通过 crontab 调用 Python 子进程不起作用

来自分类Dev

使用Python立即启动Python子进程

来自分类Dev

使用Python立即启动Python子进程

来自分类Dev

使用python的子进程模块打开python进程

来自分类Dev

子进程调用以设置crontab

来自分类Dev

在python 3中使用子进程

来自分类Dev

使用Python子进程运行npm命令

来自分类Dev

Python:使用子进程发送postgres密码

来自分类Dev

Python子进程.Popen使用git pager

来自分类Dev

在python子进程中使用setenv

来自分类Dev

使用Python的子进程时的异常处理

来自分类Dev

使用子进程python执行SQLCMD

来自分类Dev

使用Python的子进程打印密码提示

来自分类Dev

Python对Popen子进程使用超时

来自分类Dev

Python的子进程使用什么外壳?

来自分类Dev

使用python子进程运行bash命令

来自分类Dev

使用python子进程的Wget问题

来自分类Dev

使用子进程python执行SQLCMD

来自分类Dev

在python的子进程中使用撇号

来自分类Dev

强制子进程使用 Python 3

来自分类Dev

使用Python子进程检测进程是否干净退出

来自分类Dev

Linux中的Python:使用Shell杀死进程和子进程

来自分类Dev

在python子进程中为后台进程使用'&'

来自分类Dev

python子进程-分离进程

来自分类Dev

后台的Python子进程

来自分类Dev

python子进程死锁

来自分类Dev

python 3.4子进程

来自分类Dev

python子进程:FileNotFoundError