使用systemd來構建你的服務

2021-09-12 19:02:21 字數 2715 閱讀 3119

systemd 服務是一種以 .service 結尾的單元(unit)配置檔案,用於控制由systemd 控制或監視的程序。簡單說,用於後台以守護精靈(daemon)的形式執行程式。

service檔案編寫簡單易用

可以自動維持程序存活(強大的功能,可以取代pm2)

自動收集程序輸出的輸出

可以看到systemd以字母d結尾,根據linux慣用規則,可以判斷該程序為守護程序,可以通過systemctl與之互動。

systemctl start redis.service #啟動服務

systemctl stop redis.service #停止服務

systemctl restart redis.service #重啟服務

systemctl enable redis.service #將redis設定為開機啟動

sys*** service檔案一般放在/etc/systemd/system/資料夾中。

systemd service檔案是結構化的,以下給出乙份筆者常用的清單。

[unit]

description=git auto update hook service

after=network.target

[service]

type=******

execstart=/root/src/git-hookd/git-hookd

restart=always

[install]

wantedby=multi-user.target

拿之前寫過的init.d的指令碼對比一下

#!/bin/bash

### begin init info

# provides: xialeistudio

# required-start: $network

# required-stop: $local_fs

# default-start: 2 3 4 5

# default-stop: 0 1 6

# short-description: test service

# description: test service

### end init info

prog="testd"

prog_args="-u xialei"

pid_path="/var/run/"

start() '|head -n 1`

echo "$prog started"

echo $pid > "$pid_path/$prog.pid"

fi

}stop() '|head -n 1`

kill $pid

rm -rf "$pid_path/$prog.pid"

echo "$prog $pid killed"

else

echo "error! $prog not running!" 2>&1

exit 1

fi}if [ "$(id -u)" != "0" ]; then

echo "please run as root!" 2>&1

exit 1

ficase "$1" in

start)

start

exit 0

;;stop)

stop

exit 0

;;reload|restart)

stop

start

exit 0

;;**)

echo "usage: $0 " 2>&1

exit 1

;;esac

可以看到init.d指令碼實在是太原始了,systemd取代init.d指日可待

service檔案由 unit, service, install 三部分組成

所有引導過程中systemd要控制的檔案/裝置/程式等等都稱為乙個單元。

本例中只需要依賴網路單元即可

服務本體定義:

type 啟動型別有以下幾種:

+ ******: 預設型別,啟動的程序將成為服務程序。

+ forking:標準unix daemon程序。本程序啟動後會通過系統呼叫fork,把必要的通訊頻道都設定好之後父程序退出,留下守護精靈的子程序。(也就是說你自己來將程序變成daemon程序)

+ oneshot:一次性命令。該服務執行完畢後沒有程序,所以需要配合remainafterexit。

restart 重啟規則有以下幾種:

+ no(預設值):退出後不會重啟

+ always:不管是什麼退出原因,總是重啟

+ on-success:只有正常退出時(退出狀態碼為0),才會重啟

+ on-failure:非正常退出時(退出狀態碼非0),包括被訊號終止和超時,才會重啟

+ on-abnormal:只有被訊號終止和超時,才會重啟

+ on-abort:只有在收到沒有捕捉到的訊號終止時,才會重啟

+ on-watchdog:超時退出,才會重啟

systemd裝載規則定義

是時候通過systemd改寫init.d的服務了,有必要的話可以連pm2守護的程序都交給systemd來處理。

使用systemd來構建你的服務

systemd 服務是一種以 service 結尾的單元 unit 配置檔案,用於控制由systemd 控制或監視的程序。簡單說,用於後台以守護精靈 daemon 的形式執行程式。service檔案編寫簡單易用 可以自動維持程序存活 強大的功能,可以取代pm2 自動收集程序輸出的輸出 可以看到sys...

使用systemd來構建你的服務

systemd 服務是一種以 service 結尾的單元 unit 配置檔案,用於控制由systemd 控制或監視的程序。簡單說,用於後台以守護精靈 daemon 的形式執行程式。service檔案編寫簡單易用 可以自動維持程序存活 強大的功能,可以取代pm2 自動收集程序輸出的輸出 可以看到sys...

使用SQLAlchemy來構建表

from datetime import datetime from flask sqlalchemy import sqlalchemy from sqlalchemy.dialects.mysql import tinyint,bigint,varchar,char,datetime,integ...