定时自启动与自关闭一些python脚本

是windows系统,要是linux就好了. 思路是这样的, 首先到早上6点整启动脚本或某个软件,然后记录下对应的pid,等到了晚上18点整的时候,自动根据pid再杀死对应进程.

定时开启与关闭用apscheduler, 示例代码如下:

python 复制代码
from apscheduler.schedulers.blocking  import BlockingScheduler 

def start_scripts():
	pass
	
def kill_processes():
	pass
	
if __name__ == "__main__":
    
	scheduler = BlockingScheduler()
	# 添加定时任务(crontab格式)
	scheduler.add_job(start_scripts, 'cron', hour=6, minute=0   # 启动 
	scheduler.add_job(kill_processes, 'cron', hour=18, minute=0  # 终止 
	print("监控程序已启动")
	try:
		scheduler.start() 
	except (KeyboardInterrupt, SystemExit):
		pass 
    

为了保证启动程序的时候获取到对应的真实pid, 使用subprocess依赖库

python 复制代码
import subprocess 


try:
	subprocess.Popen(
		["python", script], 
		cwd="d:/file/script/start.py",
		creationflags=subprocess.CREATE_NEW_CONSOLE)
except Exception as e:
	print(f"启动失败:{str(e)}")
	
try:
	proc = subprocess.Popen(
		["d:/file/soft/server.exe"], 
		cwd="d:/file/soft/")
	pid = str(proc.pid)
	with open("pid.txt", 'a') as f:         
        f.write(f"server.exe-pid={pid}\n")
except Exception as e:
	print(f"启动失败:{str(e)}")

	

启动脚本窗口的没有在这里获取pid, 是因为一旦开启新窗口后,通过proc.pid获取的无效,AI说是

  • 在Windows 7及更早版本中,创建新控制台时会生成conhost.exe 宿主进程
  • 返回的PID指向的是控制台宿主进程,而非实际目标进程
  • 新架构差异:Windows 8+ 采用了conhost与终端分离的新架构,而Win7使用传统模式

总之为了避免这个情况, 我在被启动的python脚本里面读取pid,使用的psutil库,如下:

python 复制代码
import psutil 

current_process = psutil.Process()
pid = str(current_process.pid)
print(f"当前进程ID: {pid}")
with open("pid.txt", 'a') as f:         
    f.write(f"script-1-pid={pid}\n") 

这样就可以避免返回的pid异常问题了. 后期等到晚上18点的时候读取pid文件,按顺序kill即可.

当然如果希望每隔一段时间执行一次,可以这样:

python 复制代码
def print_fun():
	print("执行时间:", time.asctime())

scheduler.add_job(print_fun, 'interval', seconds=10)
相关推荐
std8602115 分钟前
Rust 与 Python – 这是未来的语言吗?
开发语言·python·rust
鄃鳕28 分钟前
Flask【python】
后端·python·flask
曾凡宇先生30 分钟前
openEuler安装jdk,nginx,redis
linux·开发语言·数据库·openeuler
_OP_CHEN30 分钟前
Linux系统编程:(三)基础指令详解(2)
linux·man·more·cat·linux指令·cp·whereis
weixin_466831 分钟前
Python编程之面向对象
开发语言·人工智能·python
安卓开发者37 分钟前
Docker常用镜像使用指南:从入门到实战
运维·docker·容器
Lenyiin1 小时前
《 Linux 点滴漫谈: 三 》掌控终端:让 Shell 成为你的系统魔杖
linux·运维·服务器·lenyiin
杭州泽沃电子科技有限公司1 小时前
钢铁厂运输设备在线监测:构建智能工厂的安全与效率基石
运维·人工智能·智能监测
Lynnxiaowen1 小时前
今天我们学习python编程常用模块与面向对象
运维·python·学习·云计算
一头生产的驴1 小时前
java整合itext pdf实现固定模版pdf导出
java·python·pdf