使用 python 脚本定时操作 screen

环境

系统:centos 7.3
语言:python 2.7.5
第三方包:APScheduler 3.6.3

需求

由于之前写的一个小程序经常报错,尝试了很多种方法之后都不见效,只有隔 4-5 天左右重启一次程序才能暂时解决。因此就想写个脚本定时重启后台运行在 screen 中的程序。

用到的 screen 操作指令

# -*- coding: utf-8 -*

import os

# 要向会话中发送的指令 cmd,\n 代表回车,
cmd = "cd /usr/local\n"
# 要向会话中发送的指令 cmd,\n 代表回车,\003 代表 ctrl+c,
cmd2 = "\003\n"
os.system('screen -x -S txltongbu -p 0 -X stuff "cmd"')
os.system('screen -x -S txltongbu -p 0 -X stuff "cmd2"')

参数说明:

-x   恢复之前离线的screen作业。
-S <作业名称>  指定screen作业的名称。

-p 0 指定第一个(从0开始)window,一个screen里可以有几个window,这里只需要指定第一个,不然会在某些情况下不生效。

-X 执行一个指定的screen支持的command

stuff 是-X的第一个参数,也是screen支持的一个command,意思是粘贴一个string

“cmd” 是粘贴的string 内容

‘\n’ 是粘贴一个回车符进去,以此来执行screen里面的top命令

\003 代表 ctrl+c,更多详见https://blog.csdn.net/weixin_41474364/article/details/106195754

更多 screen 参数详见https://blog.csdn.net/weixin_41474364/article/details/106196103

定时部分

# -*- coding: utf-8 -*

from apscheduler.schedulers.blocking import BlockingScheduler
import logging

def test():
	pass

logging.basicConfig()

sched = BlockingScheduler()

# 每天22:00:00运行
sched.add_job(test, 'cron', year='*', month='*', day='*', hour='22', minute='00', second='00')
# 每天23:00:00运行
sched.add_job(test, 'cron', year='*', month='*', day='*', hour='23', minute='00', second='00')
sched.start()

更多 APScheduler 用法详见 https://blog.csdn.net/weixin_41474364/article/details/106196916

遗留问题

中间遇到了一个问题,就是不同用户下(root 和 应用账户)无法登陆同一个 screen,为了快速解决,将 已有的 screen 移到了同一个账户下运行。
但是查到了两篇开启多用户登陆同一个 screen 的文章,如下:
1.HowTo Share A Terminal Session Using Screen
2.gnu-screen – 运行GNU Screen suid root是使多用户模式工作的唯一方法吗?

你可能感兴趣的:(运维,Python)