systemd實現python的守護程序

2021-07-25 04:27:01 字數 2280 閱讀 7176

之前有轉過一遍python實現守護程序方法的部落格,這次我們看看用systemd是如何實現的。

有關systemd的介紹和使用推薦阮一峰老師的以下兩篇部落格,寫的非常詳細和全面

下面我們看看用systemd如何實現守護程序(我的環境centos 7

#!/usr/bin/env python

# -*- coding=utf-8 -*-

"""每隔5秒輸出本地時間到指定的檔案

path: /home/test.py

"""import time

filepath =

'/home/time'

# 檔案路徑

fm =

'%y-%m-%d %x'

defget_time()

:while1:

nowtime = time.strftime(fm, time.localtime())

with

open

(filepath,

'a')

as fp:

fp.write(nowtime)

fp.write(

'\n'

) time.sleep(5)

if __name__ ==

'__main__'

: get_time(

)

接著我們在/home目錄下建立乙個systemd的檔案test.service

[unit]

description=test deamon

after=rc-local.service

[service]

type=******

user=root

group=root

workingdirectory=/home

execstart=/usr/bin/python test.py

restart=always

[install]

wantedby=multi-user.target

把此檔案複製到systemd目錄下:cp /home/test.service /etc/systemd/system/

啟動:systemctl start test.service

ps -ef | grep python檢視python程序會發現多了/usr/bin/python test.py的程序

當我們人為kill掉此程序的時候,systemd會自動幫我們重啟此程序

啟動後檢視time檔案就會看到每隔5秒輸出時間了:tail -f /home/time

停止:systemctl stop test.service

如果想開機啟動此服務

$ systemctl enable test.service

# 以上命令相當於執行以下命令,把test.service新增到開機啟動中

$ sudo ln -s '/etc/systemd/system/test.service' '/etc/systemd/system/multi-user.target.wants/test.service'

systemd 實現守護程序是不是so easy 啊!比起python**方式實現真的容易方便多了

注:現在大部分linux衍生版本都支援systemd(如centos,deepin),部分不支援(如:ubuntu14.04之前的版本)

檢視系統是否支援systemd:systemctl --version如果提示未找到命令則說明系統不支援systemd

檢視系統詳細資訊:hostnamectl

注:由systemd起的任何服務,當我們停掉該systemd時,服務也會隨之停掉

比如說,我們自己定義了乙個systemd service,用來執行某python指令碼,而該指令碼啟動mysql、nginx服務,當我們停掉該systemd service(systemctl stop ***.service)時,mysql和nginx服務也會停(kill)掉。因為這兩個服務是有systemd起的,當systemd服務停/kill掉時,由該systemd服務所起的服務或程序也會停/kill掉。

利用systemd 實現 tomcat 多例項

環境 centos 7 x86 64 1 安裝jdk rpm ivh jdk 8u60 linux x64.rpm 2 建立普通使用者 getent group tomcat groupadd r tomcat getent passwd tomcat useradd r d opt s bin n...

Systemd學習介紹

1.systemd是什麼?systemd是一種新的linux系統服務管理器。d daemon 它替換了init系統,能夠管理系統啟動過程和一些系統服務,一旦啟動起來,就將監管整個系統。傳統的init程序啟動方式的兩大弊端 一是啟動時間長。序列啟動 二是啟動指令碼複雜。systemd 並行啟動服務,按...

使用Systemd包裝SpringBoot應用

為應用建立乙個service檔案 unit description springboot rest service service user ubuntu 要執行程式的路徑 呼叫jar檔案的shell執行檔案 succes itstatus 143 timeoutstopsec 10 restart...