小奥的学习笔记

  • Home
  • Learning & Working
    • Speech Enhancement Notes
    • Programming language
    • Computer & DL
    • MOOC
  • Life
    • Life Time
    • Thinking & Comprehension
    • Volunteer
    • Plan
    • Travel
  • Footprints
  • GuestBook
  • About
    • About Me
    • 个人履历
    • 隐私策略
  1. 首页
  2. Study-notes
  3. Computer & DL
  4. Linux
  5. 正文

《鸟哥的Linux私房菜》(基础篇)笔记整理(第17章)Part.2

2019年1月12日 1133点热度 0人点赞 0条评论

三、systemctl针对service类型的配置文件

1.systemctl配置文件相关目录介绍

我们知道服务的管理是通过systemd,而systemd的配置文件大部分位于/usr/lib/system/system/目录中。但是Red Hat官方文档中,不允许修改这个文件,修改的文件位于/etc/system/system目录内。例如我想要修改vsftpd.service的话,那么应该怎样做呢?

(1)/usr/lib/system/system/vsftpd.service:官方的预置配置文件;

(2)/etc/systemd/system/vsftpd.service.d/custom.conf:在/etc/systemd/system底下建立与配置文件相同文件名的目录,但是要加上.d的后缀名。然后在该目录下新建配置文件即可。另外,配置文件的后缀名最好为.conf。

(3)/etc/system/system/vsftpd.service.wants/*:这里面的文件为快捷方式,设置相依服务的连接,意思是启动了vsftpd.service后,最好再加上这个目录下面建议的服务。

(4)/etc/system/system/vsftpd.service.requires/*:这里面的文件为快捷方式,设置相依服务的连接,意思是启动vsftpd.service之前,需要事先启动的服务。

2.systemctl配置文件配置项目介绍

一个配置文件,大概分为三个部分,即:

(1)[Unit]:unit本身的说明文字,以及与其他相依daemon的设定,包括在什么服务之后才能启动本unit之类的;

(2)[Service],[Socket],[Timer],[Mount],[Path]..:不同的unittype就得要使用相对应的设定项目。这个项目内主要在规范服务启动的脚本、环境配置文件档名、重新启动的方式等等。

(3)[Install]:这个项目就是将此unit安装到哪个target里面去的意思。

说明一下:

(1)设定项目通常是可以重复的,例如我可以重复设定两个After在配置文件中,不过,后面的设定会取代前面的喔!因此,如果你想要将设定值归零,可以使用类似『After=』的设定,亦即该项目的等号后面什么都没有,就将该设定归零了(reset)。

(2)如果设定参数需要有『是/否』的项目(布尔值),你可以使用1,yes,true,on代表启动,用0,no,false,off代表关闭!随你喜好选择啰!

(3)空白行、开头为#或;的那一行,都代表注释。

每个部分里面设定的详细内如解释如下:

[Unit] 部份
设定参数 参数意义说明
Description 就是当我们使用 systemctl list-units 时,会输出给管理员看的简易说明!当然,使用 systemctl status 输出的此服务的说明,也是这个项目!
Documentation 这个项目在提供管理员能够进行进一步的文件查询的功能!提供的文件可以是如下的资料:

·                     Documentation=http://www....

·                     Documentation=man:sshd(8)

·                     Documentation=file:/etc/ssh/sshd_config

After 说明此 unit 是在哪个 daemon 启动之后才启动的意思!基本上仅是说明服务启动的顺序而已,并没有强制要求里头的服务一定要启动后此 unit 才能启动。 以 sshd.service 的内容为例,该档案提到 After 后面有 network.target 以及 sshd-keygen.service,但是若这两个 unit 没有启动而强制启动 sshd.service 的话, 那么 sshd.service 应该还是能够启动的!这与 Requires 的设定是有差异的喔!
Before 与 After 的意义相反,是在什么服务启动前最好启动这个服务的意思。不过这仅是规范服务启动的顺序,并非强制要求的意思。
Requires 明确的定义此 unit 需要在哪个 daemon 启动后才能够启动!就是设定相依服务啦!如果在此项设定的前导服务没有启动,那么此 unit 就不会被启动!
Wants 与 Requires 刚好相反,规范的是这个 unit 之后最好还要启动什么服务比较好的意思!不过,并没有明确的规范就是了!主要的目的是希望建立让使用者比较好操作的环境。 因此,这个 Wants 后面接的服务如果没有启动,其实不会影响到这个 unit 本身!
Conflicts 代表冲突的服务!亦即这个项目后面接的服务如果有启动,那么我们这个 unit 本身就不能启动!我们 unit 有启动,则此项目后的服务就不能启动! 反正就是冲突性的检查啦!

 

[Service]部份
设定参数 参数意义说明
Type 说明这个daemon启动的方式,会影响到ExecStart喔!一般来说,有底下几种类型

·                     simple:默认值,这个daemon主要由ExecStart接的指令串来启动,启动后常驻于内存中。

·                     forking:由ExecStart启动的程序透过spawns延伸出其他子程序来作为此daemon的主要服务。原生的父程序在启动结束后就会终止运作。传统的unit服务大多属于这种项目,例如httpd这个WWW服务,当httpd的程序因为运作过久因此即将终结了,则systemd会再重新生出另一个子程序持续运作后,再将父程序删除。据说这样的效能比较好!!

·                     oneshot:与simple类似,不过这个程序在工作完毕后就结束了,不会常驻在内存中。

·                     dbus:与simple类似,但这个daemon必须要在取得一个D-Bus的名称后,才会继续运作!因此设定这个项目时,通常也要设定BusName=才行!

·                     idle:与simple类似,意思是,要执行这个daemon必须要所有的工作都顺利执行完毕后才会执行。这类的daemon通常是开机到最后才执行即可的服务!

比较重要的项目大概是simple,forking与oneshot了!毕竟很多服务需要子程序(forking),而有更多的动作只需要在开机的时候执行一次(oneshot),例如文件系统的检查与挂载啊等等的。

EnvironmentFile 可以指定启动脚本的环境配置文件!例如sshd.service的配置文件写入到/etc/sysconfig/sshd当中!你也可以使用Environment=后面接多个不同的Shell变量来给予设定!
ExecStart 就是实际执行此daemon的指令或脚本程序。你也可以使用ExecStartPre(之前)以及ExecStartPost(之后)两个设定项目来在实际启动服务前,进行额外的指令行为。但是你得要特别注意的是,指令串仅接受『指令参数参数...』的格式,不能接受<,>,>>,|,&等特殊字符,很多的bash语法也不支持喔!所以,要使用这些特殊的字符时,最好直接写入到指令脚本里面去!不过,上述的语法也不是完全不能用,亦即,若要支持比较完整的bash语法,那你得要使用Type=oneshot才行喔!其他的Type才不能支持这些字符。
ExecStop 与systemctlstop的执行有关,关闭此服务时所进行的指令。
ExecReload 与systemctlreload有关的指令行为
Restart 当设定Restart=1时,则当此daemon服务终止后,会再次的启动此服务。举例来说,如果你在tty2使用文字界面登入,操作完毕后注销,基本上,这个时候tty2就已经结束服务了。但是你会看到屏幕又立刻产生一个新的tty2的登入画面等待你的登入!那就是Restart的功能!除非使用systemctl强制将此服务关闭,否则这个服务会源源不绝的一直重复产生!
RemainAfterExit 当设定为RemainAfterExit=1时,则当这个daemon所属的所有程序都终止之后,此服务会再尝试启动。这对于Type=oneshot的服务很有帮助!
TimeoutSec 若这个服务在启动或者是关闭时,因为某些缘故导致无法顺利『正常启动或正常结束』的情况下,则我们要等多久才进入『强制结束』的状态!
KillMode 可以是process,control-group,none的其中一种,如果是process则daemon终止时,只会终止主要的程序(ExecStart接的后面那串指令),如果是control-group时,则由此daemon所产生的其他control-group的程序,也都会被关闭。如果是none的话,则没有程序会被关闭喔!
RestartSec 与Restart有点相关性,如果这个服务被关闭,然后需要重新启动时,大概要sleep多少时间再重新启动的意思。预设是100ms(毫秒)。

 

[Install]部份
设定参数 参数意义说明
WantedBy 这个设定后面接的大部分是*.targetunit!意思是,这个unit本身是附挂在哪一个targetunit底下的!一般来说,大多的服务性质的unit都是附挂在multi-user.target底下!
Also 当目前这个unit本身被enable时,Also后面接的unit也请enable的意思!也就是具有相依性的服务可以写在这里呢!
Alias 进行一个连接的别名的意思!当systemctl enable相关的服务时,则此服务会进行连结档的建立。

 

四、systemctl针对timer的配置文件

在Windows中有计划任务和启动项一说,如果在Linux中某些服务你想定期执行或开机启动某个服务,可以使用systemd和timers.target来进行处理。

使用systemd.timer的优点:

(1)由于所有的systemd的服务产生的信息都会被记录(log),因此比crond在debug上面要更清楚方便的多;

(2)各项timer的工作可以跟systemd的服务相结合;

(3)各项timer的工作可以跟controlgroup(cgroup,用来取代/etc/secure/limit.conf的功能)结合,来限制该工作的资源利用。

1.任务需求

基本上,想要使用systemd的timer功能,必须要有以下几点:

(1)系统的timer.target必须启动;

(2)要有一个sname.service的服务存在(sname是你自己定的名称);

(3)要有sname.timer的时间启动服务存在。

接下来我们假设用backup.service来进行定期执行。

2.sname.timer的设定值

在/etc/system/system下面新建这个timer文件。内容有以下几点:

[Timer]部份
设定参数 参数意义说明
OnActiveSec 当timers.target启动多久之后才执行这只unit。
OnBootSec 当开机完成后多久之后才执行。
OnStartupSec 当systemd第一次启动之后过多久才执行。
OnUnitActiveSec 服务在最后一次启动后,隔多久后再执行一次。
OnUnitInactiveSec 服务在最后一次停止后,隔多久再执行一次。
OnCalendar 使用实际时间的方式来启动服务。
Unit 如果你的sname并不相同时,就得要指定是哪一个service unit。
Persistent 当使用OnCalendar的设定时,指定该功能要不要持续进行的意思。

至于使用OnCalendar的时间格式,基本语法是:

星期几 YYYY-MM-DD HH:MM:SS

例如:THU 2019-01-07 20:42:44

也可以使用其它方式来指定时间,例如:

(1)us或者usec(微秒);

(2)ms或msec(毫秒);

(3)s, sec, second, seconds;

(4)m, min, minute, minutes;

(5)h, hr, hour, hours;

(6)d, day, days;

(7)w, week, weeks;

(8)month, months;

(9)y, year, years。

此外,可以使用口语化的表达方式,如下表所示:

英文口语 实际的时间格式代表 英语口语  
now Thu 2019-01-07 20:47:53 weekly Mon *-*-* 00:00:00
today Thu 2019-01-07 00:00:00 monthly *-*-01 00:00:00
tomorrow Thu 2019-01-08 00:00:00 +3h10m Thu 2019-01-07 23:57:53
hourly *-*-* *:00:00 2019-01-08 TUE 2019-01-08 00:00:00
daily *-*-* 00:00:00    
本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: linux 鸟哥的linux私房菜
最后更新:2019年1月12日

davidcheung

这个人很懒,什么都没留下

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

搜索
欢迎关注我的个人公众号
最新 热点 随机
最新 热点 随机
DEEPFILTERNET:一种基于深度滤波的全频带音频低复杂度语音增强框架 奥地利匈牙利九日游旅程 论文阅读之Study of the General Kalman Filter for Echo Cancellation 小奥看房之鸿荣源珈誉府 杭州往返旅途及西溪喜来登和万怡的体验报告 2022年的第一篇碎碎念
奥地利匈牙利九日游旅程小奥看房之鸿荣源珈誉府论文阅读之Study of the General Kalman Filter for Echo CancellationDEEPFILTERNET:一种基于深度滤波的全频带音频低复杂度语音增强框架
山东省机器人大赛双足(交叉足)翔梦技术报告 算法笔记之线性规划网络流问题(3) Leetcode题目解析(191108):215及221 2015.3—2015.7的计划(证书考试)安排 新作官网制作即将启动…… 博客即日起开始“上云”啦!
标签聚合
高中 生活 算法 鸟哥的linux私房菜 leetcode 学习 python学习 linux Python Java
最近评论
davidcheung 发布于 5 个月前(02月09日) The problem has been fixed. May I ask if you can s...
tk88 发布于 5 个月前(02月07日) Hmm is anyone else having problems with the pictur...
cuicui 发布于 9 个月前(10月20日) :wink:
niming 发布于 10 个月前(09月19日) 同级校友,能刷到太巧了
davidcheung 发布于 2 年前(08月16日) 我得找一下我之前整理的word文档看一下,如果找到了我就更新一下这篇文章。
Nolan 发布于 2 年前(07月25日) 您的笔记非常有帮助。贴图不显示了,可以更新一下吗?
davidcheung 发布于 3 年前(06月19日) 到没有看webrtc的代码。现在主要在看我们公司的代码了。。。只是偶尔看一看webrtc的东西。。。
aobai 发布于 3 年前(03月13日) gain_change_hangover_ 应该是每三个block 只能够调整一次,这样保证每帧...
匿名 发布于 5 年前(12月30日) 烫
小奥 发布于 5 年前(12月12日) webRTC里面的NS本身我记得就是在C++里面呀

COPYRIGHT © 2025 小奥的学习笔记. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

陕ICP备19003234号-1

鲁公网安备37120202000100号