Systemd简介
Systemd是Linux系统中一个初始化系统和服务管理器,它可以替代传统的SysVinit和Upstart,从CentOS 7开始,Systemd已经成为默认的初始化系统,Systemd具有以下优点:
1、简单的配置文件;
2、强大的服务管理功能;
3、支持多种运行级别;
4、丰富的日志记录和诊断工具。
Unit文件配置
Unit文件是Systemd用来描述服务的配置文件,通常以.service结尾,一个典型的Unit文件包含以下几个部分:
1、[Unit]:包含了一些元数据,如Description(描述)、Requires(依赖关系)等;
2、[Service]:定义了服务的类型、启动方式、是否自动启动等;
3、[Install]:定义了如何安装服务;
4、[ExecStart]:定义了服务的启动命令;
5、[User]:定义了运行服务的用户和组;
6、[Group]:定义了服务的所属组;
7、[LimitNOFILE]:限制了服务打开的最大文件描述符数;
8、[InstallLimits]:定义了服务的资源限制;
9、[RemainAfterExit]:定义了服务退出后的状态;
10、[TimeoutStopSec]:设置了服务的超时停止时间。
下面是一个简单的Unit文件示例:
[Unit] Description=My Custom Service After=network.target [Service] Type=simple ExecStart=/usr/local/bin/my-custom-service.sh Restart=on-failure User=root Group=root Environment=PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin LimitNOFILE=65536 TimeoutStopSec=300 RestartSec=5s KillMode=process SendSIGKILL=no SuccessExitStatus=143 ErrorExitStatus=144 TimeoutStartSec=0 WorkingDirectory=/var/lib/my-custom-service PrivateTmp=true ProtectedProcess=%i NoNewPrivileges=true CapabilityBoundingSet=CAP_NET_BIND_SERVICE+CAP_NET_ADMIN+CAP_SYS_ADMIN+CAP_SYS_BOOT+CAP_SYS_NICE+CAP_SYS_PACCT+CAP_SYS_PTRACE+CAP_SYS_RAWIO+CAP_SYS_TIME+CAP_SYS_TTY_CONFIG+CAP_SYSLOG+CAP_WAKE_ALARM+CAP_MKNOD+CAP_FOWNER+CAP_DAC_OVERRIDE+CAP_MAC_OVERRIDE+CAP_SETGID+CAP_SETUID+CAP_SETFCAP+CAP_KILL+CAP_SETPCAP+CAP_NET_RAW+CAP_IPC_LOCK+CAP_IPC_OWNER+CAP_IPC_PERMIT+CAP_SYSCALL+CAP_CHOWN+CAP_LEASE+CAP_AUDIT_WRITE+CAP_AUDIT_CONTROL+CAP_MAC_ADMIN+CAP_SYSLOGGER+CAP_WAKE_ALARM+CAP_SETGID+CAP_SETUID+CAP_SETFCAP+CAP_KILL+CAP_SETPCAP+CAP_NET_RAW+CAP_IPC_LOCK+CAP_IPC_OWNER+CAP_IPC_PERMIT+CAP_SYSCALL+CAP_CHOWN+CAP_LEASE+CAP_AUDIT_WRITE+CAP_AUDIT_CONTROL+CAP_MAC_ADMIN+CAP_SYSLOGGER+CAP_WAKE_ALARM+CAP_{{.ServiceName}}={{.Value}} PrivateDevices=true ReadOnlyPaths=/sys,proc,dev,run,mnt,etc,var,lib/systemd/system,lib/systemd/system/multi-user.target.wants/,lib/systemd/system/graphical.target.wants/,lib/systemd/system/anaconda.target.wants/,lib/systemd/system/anaconda-server.target.wants/,lib/systemd/system/anaconda-client.target.wants/,lib/systemd/system/anaconda-server-headless.target.wants/,lib/systemd/system/anaconda-client-headless.target.wants/,lib/systemd/system/anaconda-server-single-user.target.wants/,lib/systemd/system/anaconda-client-single-user.target.wants/*,lib/systemd/system/*,lib/*,usr/*,etc/*,home/*,tmp/*,sbin/*,bin/*,lib/*,sys/*,var/*,run/*,db/*,opt/*,etc/*,media/*,mnt/*,run/*,lock/*,spool/*,mail/*,shutdown/*,isolation/*,logrotate/*,initrd /*{{else}} {{if isset multi-user.target}} {{then}}ExecStart=-/usr/bin/login{{end}} {{end}}{{if isset graphical.target}} {{then}}ExecStartPost=-$HOME $DISPLAY $TERM logout{{end}} {{end}}{{if isset single-user.target}} {{then}}ExecStartPre=rm -rf ~/test{{end}} {{end}}{{with pidfile := ""}}{{with socketfile := ""}}{{with hassocket := false}}{{range seq 10}}{{if fileexists (path "$socketfile") || fileexists (path "$pidfile")}} {{break}}{{end}}{{end}}{{if not hassocket}} {{with socketfile := path "$PIDDIR" (path "$unitname").replace ('%' '%%') "socket"}}{{with hassocket = true}}{{end}}{{end}}{{end}}{{if hassocket}} {{exec start-stop-daemon --start --quiet --oknodo --pidfile $pidfile --make-pidfile --socket $socketfile --exec /usr/bin/my-custom-service -{{ if or (eq .Values.priority) (eq .Values.priority 'unprivileged')) then (printf '%q ' .Values.priority) else (printf '%q ' '') end}}} {{else}} {{exec start-stop-daemon --stop --quiet --oknodo --retry forever --pidfile $pidfile --exec /usr/bin/my-custom-service}} {{end}}{{with timeout stopsec := 300}}{{if isset nowait}} {{or (eq timeout stopsec 0) (eq timeout stopsec '0')}} {{else}}{{with timeout stopsec := timeout stopsec + 5}}{{exec start-stop-daemon --stop --quiet --signal KILL --retry forever --kill-mode process --timeout $timeout stopsec --exec /usr/bin/my-custom-service}} {{end}}{{end}}{{with timeout restartsec := 5}}{{if isset nowait}} {{or (eq timeout restartsec 0) (eq timeout restartsec '0')}} {{else}}{{with timeout restartsec := timeout restartsec + 5}}{{exec start-stop-daemon --start --quiet --oknodo --retry forever --after $timeout restartsec --make-pidfile --exec 本文将介绍如何在CentOS 7中使用Systemd进行服务管理。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/142594.html