定时自启动与自关闭一些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)
相关推荐
simple_whu4 分钟前
在Ubuntu24.04中配置开源直线特征提取软件DeepLSD
linux·deep learning·computer vision
Menior_9 分钟前
[Linux] vim及gcc工具
linux·运维·vim
成工小白33 分钟前
【Linux】进程地址空间
linux·算法
不念霉运35 分钟前
2025年中国DevOps工具选型指南:主流平台能力横向对比
运维·ci/cd·团队开发·devops
chilavert31839 分钟前
关于Python 实现接口安全防护:限流、熔断降级与认证授权的深度实践
python·网络安全
珹洺1 小时前
Jsp技术入门指南【十四】实现基于MySQL+JDBC+JSP数据库验证的登录界面与登录跳转功能
java·运维·数据库·mysql·servlet
能来帮帮蒟蒻吗1 小时前
Python -将MP4文件转为GIF图片
开发语言·python·学习·视频
dadeity1 小时前
Linux 离线安装 Docker 和 Docker Compose 最新版 的完整指南
linux·docker·docker-compose
珹洺1 小时前
计算机操作系统(七)详细讲解进程的组成与特性,状态与转换
运维·服务器·计算机网络
suoxiao7771 小时前
通过anaconda安装jupyter
ide·python·jupyter