【守護進程】以守護進程運行Python腳本【原創】

概要

目前在做個發佈項目,需要一直運行單個Python腳本,以便於對需要發佈的任務進行發佈邏輯操作,並且是在Linux下運行的

目前能想到的方法有兩個:

  • Crontab定時
  • Systemctl守護進程

最後決定使用Systemctl守護進程來做,一方面是因爲Crontab最小粒度只支持到一分鐘,也就是1分鐘執行1次,而這個腳本需要的實時性較高,7、8秒一次,另一方面,使用守護進程來做的話,一旦掛了能實現重啓進程


方法

release.py後臺常駐運行
以守護進程的方式運行,一旦掛掉自動重啓

需要常駐的腳本:release.py

# -*- coding:utf-8 -*-
​
import time
​
​
# 常駐進程,每8秒執行一個任務的發佈
while 1:
    print(time.gmtime())
​
    # Todo 執行操作
    run()
​
    # 延時8秒
    time.sleep(8)
常駐進程,每8秒執行一次

編寫systemd:
vim /etc/systemd/system/auto_release.service

[Unit]
Description=The python script used for release
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=simple
ExecStart=/usr/bin/python3 /data/zaspace/data/AutoRelease/release.py
Restart=on-failure
[Install]
WantedBy=multi-user.target

啓動該腳本並且開機運行
systemctl start auto_release
systemctl enable auto_release

查看該進程的狀態

systemctl status auto_release

運行:

● auto_release.service - The python script used for release
   Loaded: loaded (/etc/systemd/system/auto_release.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2019-08-20 13:46:52 CST; 24h ago
 Main PID: 16652 (python3)
   CGroup: /system.slice/auto_release.service
           └─16652 /usr/bin/python3 /data/zaspace/data/AutoRelease/release.py
​
Aug 21 14:09:03 zabank-toolset-forward.novalocal python3[16652]: time.struct_time(tm_year=2019, tm_mon=8, tm_mday=21, tm_hour=...t=0)
Aug 21 14:09:03 zabank-toolset-forward.novalocal python3[16652]: time.struct_time(tm_year=2019, tm_mon=8, tm_mday=21, tm_hour=...t=0)
Aug 21 14:09:03 zabank-toolset-forward.novalocal python3[16652]: time.struct_time(tm_year=2019, tm_mon=8, tm_mday=21, tm_hour=...t=0)
Hint: Some lines were ellipsized, use -l to show in full.
[root@zabank-toolset-forward AutoRelease]# systemctl status auto_release
● auto_release.service - The python script used for release
   Loaded: loaded (/etc/systemd/system/auto_release.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2019-08-20 13:46:52 CST; 24h ago
 Main PID: 16652 (python3)
   CGroup: /system.slice/auto_release.service
           └─16652 /usr/bin/python3 /data/zaspace/data/AutoRelease/release.py
​
Aug 21 14:09:03 zabank-toolset-forward.novalocal python3[16652]: time.struct_time(tm_year=2019, tm_mon=8, tm_mday=21, tm_hour=6, tm_min=7, tm_sec=42, tm_wday=2, tm_yday=233, tm_isdst=0)
Aug 21 14:09:03 zabank-toolset-forward.novalocal python3[16652]: time.struct_time(tm_year=2019, tm_mon=8, tm_mday=21, tm_hour=6, tm_min=7, tm_sec=50, tm_wday=2, tm_yday=233, tm_isdst=0)
Aug 21 14:09:03 zabank-toolset-forward.novalocal python3[16652]: time.struct_time(tm_year=2019, tm_mon=8, tm_mday=21, tm_hour=6, tm_min=7, tm_sec=59, tm_wday=2, tm_yday=233, tm_isdst=0)

上面的輸出結果含義如下:

  • Loaded行:配置文件的位置,是否設爲開機啓動
  • Active行:表示正在運行
  • Main PID行:主進程ID
  • Status行:由應用本身(這裏是 httpd )提供的軟件當前狀態
  • CGroup塊:應用的所有子進程
  • 日誌塊:應用的日誌

注意:如果該Python腳本有更新的話,需要重啓該進程的,不會立即生效的

相關命令

啓動該服務 sudo systemctl start xxx.service
啓動該服務 sudo systemctl restart xxx.service
停止該服務 sudo systemctl stop xxx.service
查看運行狀態 sudo systemctl status xxx.service
設置開機運行 sudo systemctl enable xxx.service

查看是否有啓動該Python腳本

ps -ef | grep python

查看日誌

journalctl -xu auto_release
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章