首页 > 系统相关 >linux后台运行python脚本

linux后台运行python脚本

时间:2024-10-21 23:32:57浏览次数:1  
标签:10 21 python 192.168 136.128 linux 后台 World Hello

一、使用sytemctl 运行service

准备需要运行的脚本HelloWorld.py,配置文件HelloWorld.servce

十秒打印一次日志

import time
import logging

# 配置日志记录器
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S')

while True:
    # 使用logging.info来记录信息
    logging.info("Hello World")
    # 等待10秒
    time.sleep(10)

通过HelloWorld.servce这个配置文件来指定如何运行脚本,可以通过man 5 systemd.sercie获取service文件的说明书,

 

可以知道unit、service、install这三个部分是必要的,往下翻可以找到相应的模板

[Unit]
Description=Foo

[Service]
ExecStart=/usr/sbin/foo-daemon

[Install]
WantedBy=multi-user.target

 linux文件系统中有三个文件夹专门用于存放配置文件

/etc/systemd/system #
/usr/lib/systemd/system # 一般为安装软件存在的配置文件

 在/etc/systemd/system 文件夹下面创建HelloWorld.service

[Unit]
Description=Hello World #对于该配置文件的额描述

[Service]
ExecStart=/usr/bin/python3 /root/HelloWorld.py # 使用python3来执行后面这个脚本

[Install]
WantedBy=multi-user.target

 接下来就可以启动服务,运行这个脚本了

[root@192 system]# systemctl start HelloWorld
[root@192 system]# systemctl status HelloWorld
● HelloWorld.service - Hello World
   Loaded: loaded (/etc/systemd/system/HelloWorld.service; disabled; vendor preset: disabled)
   Active: active (running) since Mon 2024-10-21 07:04:06 PDT; 11s ago
 Main PID: 90135 (python3)
    Tasks: 1 (limit: 49646)
   Memory: 4.6M
   CGroup: /system.slice/HelloWorld.service
           └─90135 /usr/bin/python3 /root/HelloWorld.py

10月 21 07:04:06 192.168.136.128 systemd[1]: Started Hello World.
10月 21 07:04:06 192.168.136.128 python3[90135]: 2024-10-21 07:04:06 - Hello World
10月 21 07:04:16 192.168.136.128 python3[90135]: 2024-10-21 07:04:16 - Hello World

启动一个服务:systemctl start servicename
停止一个服务:systemctl stop servicename

重启一个服务:systemctl restart servicename

重新加载一个服务的配置:systemctl reload servicename

查看一个服务的状态:systemctl status servicename

显示一个服务的所有信息:systemctl show servicename

启用一个服务,使其在系统启动时自动启动:systemctl enable servicename

禁用一个服务,使其在系统启动时不自动启动:systemctl disable servicename

通过journalctl -u HelloWorld.service 可以查看这个服务运行的所有日志

root@192 system]# journalctl -u HelloWorld.service 
-- Logs begin at Fri 2024-10-11 06:42:39 PDT, end at Mon 2024-10-21 07:11:50 PDT. --
10月 21 06:06:58 192.168.136.128 systemd[1]: Started Hello World.
10月 21 06:08:37 192.168.136.128 systemd[1]: Stopping Hello World...
10月 21 06:08:37 192.168.136.128 systemd[1]: Stopped Hello World.
10月 21 06:12:45 192.168.136.128 systemd[1]: Started Hello World.
10月 21 06:12:45 192.168.136.128 python3[88547]: 2024-10-21 06:12:45 - Hello World
10月 21 06:12:55 192.168.136.128 python3[88547]: 2024-10-21 06:12:55 - Hello World
10月 21 06:13:05 192.168.136.128 python3[88547]: 2024-10-21 06:13:05 - Hello World
10月 21 06:13:15 192.168.136.128 python3[88547]: 2024-10-21 06:13:15 - Hello World
10月 21 06:13:25 192.168.136.128 python3[88547]: 2024-10-21 06:13:25 - Hello World
10月 21 06:13:35 192.168.136.128 python3[88547]: 2024-10-21 06:13:35 - Hello World
10月 21 06:13:45 192.168.136.128 python3[88547]: 2024-10-21 06:13:45 - Hello World
10月 21 06:13:55 192.168.136.128 python3[88547]: 2024-10-21 06:13:55 - Hello World
10月 21 06:14:05 192.168.136.128 python3[88547]: 2024-10-21 06:14:05 - Hello World
10月 21 06:14:15 192.168.136.128 python3[88547]: 2024-10-21 06:14:15 - Hello World
10月 21 06:14:25 192.168.136.128 python3[88547]: 2024-10-21 06:14:25 - Hello World
10月 21 06:14:28 192.168.136.128 systemd[1]: Stopping Hello World...
10月 21 06:14:28 192.168.136.128 systemd[1]: Stopped Hello World.
10月 21 06:44:59 192.168.136.128 systemd[1]: Started Hello World.
10月 21 06:44:59 192.168.136.128 python3[89614]: 2024-10-21 06:44:59 - Hello World
10月 21 07:04:06 192.168.136.128 systemd[1]: Started Hello World.
10月 21 07:04:06 192.168.136.128 python3[90135]: 2024-10-21 07:04:06 - Hello World
10月 21 07:04:16 192.168.136.128 python3[90135]: 2024-10-21 07:04:16 - Hello World
10月 21 07:04:26 192.168.136.128 python3[90135]: 2024-10-21 07:04:26 - Hello World
10月 21 07:04:36 192.168.136.128 python3[90135]: 2024-10-21 07:04:36 - Hello World

这个服务的定时运行是由脚本控制的,systemd也可以通过.time文件实现脚本的定时运行

二、使用systemd定时运行服务

修改脚本不再实现循环运行

import logging

# 配置日志记录器
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
# 使用logging.info来记录信息
logging.info("Hello World")

启动服务之后查看运行状态,对比之前的输出,Active: inactive (dead)说明这个服务已经运行过了,现在已经结束

[root@192 system]# systemctl status HelloWorld
● HelloWorld.service - Hello World
   Loaded: loaded (/etc/systemd/system/HelloWorld.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

10月 21 07:09:26 192.168.136.128 python3[90135]: 2024-10-21 07:09:26 - Hello World
10月 21 07:09:36 192.168.136.128 python3[90135]: 2024-10-21 07:09:36 - Hello World
10月 21 07:09:46 192.168.136.128 python3[90135]: 2024-10-21 07:09:46 - Hello World
10月 21 07:09:56 192.168.136.128 python3[90135]: 2024-10-21 07:09:56 - Hello World
10月 21 07:10:06 192.168.136.128 python3[90135]: 2024-10-21 07:10:06 - Hello World
10月 21 07:10:16 192.168.136.128 python3[90135]: 2024-10-21 07:10:16 - Hello World
10月 21 07:10:19 192.168.136.128 systemd[1]: Stopping Hello World...
10月 21 07:10:19 192.168.136.128 systemd[1]: Stopped Hello World.
10月 21 07:17:25 192.168.136.128 systemd[1]: Started Hello World.
10月 21 07:17:25 192.168.136.128 python3[90403]: 2024-10-21 07:17:25 - Hello World

 配置HelloWorld.time文件,可以通过systemctl list-timers列出timer文件来查看一些格式,或则

通过man 5 systemd.timer 查看文件格式可以得到unit、install、timer是必要的

中文解释 systemd.timer 中文手册 [金步国] (jinbuguo.com)

 继续再/etc/systemd/system目录下编辑timer文件,相当于定时调用service服务

[Unit]
Description=Runs hellworld every hour

[Timer]
OnActiveSec=1m # 定时器生效后一分钟开始执行
Unit=HelloWorld.service # 启动的服务

[Install]
WantedBy=multi-user.target

timer中的各个参数配置,

  • OnActiveSec= 相对于该单元自身被启动的时间点; 
  • OnBootSec= 相对于机器被启动的时间点, 也就是内核开始运行的时间点; 
  • OnStartupSec= 相对于 systemd 被首次启动的时间点,也就是内核启动init进程的时间点;
  • OnUnitActiveSec= 相对于匹配单元最后一次被启动的时间点; 
  • OnUnitInactiveSec= 相对于匹配单元 最后一次被停止的时间点;

启动timer服务,并检查服务状态

waiting代表等待任务触发

running代表正在之执行

elapsed代表已经执行完毕

[root@192 system]# systemctl status HelloWorld.timer
● HelloWorld.timer - Runs hellworld every hour
   Loaded: loaded (/etc/systemd/system/HelloWorld.timer; disabled; vendor preset: disabled)
   Active: active (waiting) since Mon 2024-10-21 23:27:13 CST; 54s ago
  Trigger: Mon 2024-10-21 23:28:13 CST; 5s left

10月 21 23:27:13 192.168.136.128 systemd[1]: Stopped Runs hellworld every hour.
10月 21 23:27:13 192.168.136.128 systemd[1]: Stopping Runs hellworld every hour.
10月 21 23:27:13 192.168.136.128 systemd[1]: Started Runs hellworld every hour.
[root@192 system]# systemctl status HelloWorld.timer
● HelloWorld.timer - Runs hellworld every hour
   Loaded: loaded (/etc/systemd/system/HelloWorld.timer; disabled; vendor preset: disabled)
   Active: active (running) since Mon 2024-10-21 23:27:13 CST; 1min 9s ago
  Trigger: n/a

10月 21 23:27:13 192.168.136.128 systemd[1]: Stopped Runs hellworld every hour.
10月 21 23:27:13 192.168.136.128 systemd[1]: Stopping Runs hellworld every hour.
10月 21 23:27:13 192.168.136.128 systemd[1]: Started Runs hellworld every hour.
[root@192 system]# systemctl status HelloWorld.timer
● HelloWorld.timer - Runs hellworld every hour
   Loaded: loaded (/etc/systemd/system/HelloWorld.timer; disabled; vendor preset: disabled)
   Active: active (elapsed) since Mon 2024-10-21 23:27:13 CST; 1min 19s ago
  Trigger: n/a

 查看输出的日志journalctl -u HelloWorld.timer,脚本中的文件已经输出

10月 21 23:28:22 192.168.136.128 systemd[1]: Started Hello World.
10月 21 23:28:22 192.168.136.128 python3[4407]: 2024-10-21 23:28:22 - Hello World

 参考:

Systemd 定时器教程 - 阮一峰的网络日志 (ruanyifeng.com)

systemd.timer 中文手册 [金步国] (jinbuguo.com)

Linux Systemd完全入门 | 一个视频搞懂systemd的使用_哔哩哔哩_bilibili

标签:10,21,python,192.168,136.128,linux,后台,World,Hello
From: https://www.cnblogs.com/xyh0703/p/18491553

相关文章

  • Python Flask 数据库开发
    PythonFlask数据库开发引言环境配置创建Flask应用,连接数据库定义路由定义模型创建表创建API数据库直接操作启动Flask应用app.py示例运行Flask访问应用展望引言在现代web开发中,Python的Flask框架因其轻量和灵活性受到广泛欢迎。结合数据库技术,Flask......
  • python第三章课后习题
    efX(n):#差分方程的解return2*(-1)**(n+1)n_values=[0,1,2,3,4,5]forninn_values:print(f"X({n})={X(n)}")print("学号:3028")importnetworkxasnxG=nx.DiGraph()foriinrange(1,7):G.add_node(i)edges=[(1,2),(1,4......
  • Python沙箱逃逸(pyjail)
    参考链接:https://note.tonycrane.cc/ctf/misc/escapes/pysandbox/https://ctf-wiki.org/pwn/sandbox/python/python-sandbox-escape/https://www.cnblogs.com/mumuhhh/p/17811377.htmlhttps://www.bilibili.com/video/av1506392148/https://dummykitty.github.io/python/202......
  • Linux通过复制网卡信息配置链路聚合
    1.首先通过命令查看网卡信息名称ifconfig2.之后进入到example_ifcfgs/3文件夹中cd/usr/share/doc/teamd-1.25/example_ifcfgs/33.然后分别修改eth1、eth2、team_test0修改里面的配置信息(使用以下命令是已经进入到目录/usr/share/doc/teamd-1.25/example_ifcfgs/3视图下)......
  • Python pickle
    Pythonpicklepickle在python中实现对象结构的序列化和反序列化python序列化(Pickling)是一个将python对象层次结构转换为可以本地储存或者网络传输的字节流的过程python反序列化(unpickling)是将字节流还原为对象层次结构数据序列化:就是把不能直接储存的数据储存到......
  • Linux系统基础-动静态库
    个人主页:C++忠实粉丝欢迎点赞......
  • Python+Django智慧农场管理系统
    收藏关注不迷路!!需要的小伙伴可以发链接或者截图给我项目介绍互联网日益成熟,走进千家万户,改变多个行业传统的工作方式。智慧农场管理以用户需求为基础,借由发展迅猛的互联网平台实现智慧农场管理的信息化,简化旧时智慧农场管理所需的纸质记录这一繁杂过程,从而大幅提高智慧农......
  • Python+Django智慧养老系统-养老信息服务平台
    收藏关注不迷路!!需要的小伙伴可以发链接或者截图给我项目介绍伴随着我国社会的发展,人民生活质量日益提高。互联网逐步进入千家万户,改变传统的管理方式,智慧养老系统-养老信息服务平台以互联网为基础,利用Python技术,结合Django框架和MySQL数据库开发设计一套基于B/S的智慧养老......
  • Python+Django学生宿舍卫生检查奖惩管理系统
    收藏关注不迷路!!需要的小伙伴可以发链接或者截图给我项目介绍在当今高等教育日益普及的背景下,学生宿舍作为学生学习与生活的重要场所,其管理效率与服务质量直接影响到学生的日常体验与校园和谐。随着学生数量的不断增长,传统的人工管理方式逐渐显露出效率低下、信息更新滞后......
  • Python+django农产品销售商城系统
    收藏关注不迷路!!需要的小伙伴可以发链接或者截图给我项目介绍在当今社会,随着互联网的普及和电子商务的迅猛发展,传统农产品销售模式正面临着前所未有的挑战与机遇。传统的农产品销售往往依赖于中间商,导致价格不透明、流通环节多、成本高企,同时农民与消费者之间的信息不对称......