Linux:系统服务:CentOS7以后版本,自定义服务

可以备份自己系统的服务

vim /backups/backup.sh

#!/bin/bash

source="/etc /home /root /var/lib /var/spool/{cron,at,mail}"

target="/backups/backup-system-$(date + %Y- %m- %d).tar.gz"

[ ! -d /backups ] && mkdir /backups

tar -zcvf ${target} ${source} &> /backups/backup.log

chmod a+x /backups/backup.sh

接下来,设计一只名为 backup.service 的启动脚本

 vim /etc/systemd/system/backup.service

[Unit]

Description=backup my server

Requires=atd.service

[Service]

Type=simple

ExecStart=/bin/bash -c " echo /backups/backup.sh | at now"

[Install]

WantedBy=multi-user.target

# 因为 ExecStart 里面有用到 at 这个指令,因此, atd.service 就是一定要的服务!

systemctl daemon-reload

systemctl start backup.service

systemctl status backup.server

# 为什么 Active inactive 呢?这是因为我们的服务仅是一个简单的 script 啊!

# 因此执行完毕就完毕了,不会继续存在内存中喔!

 

systemctl 针对 timer 的配置文件

除了 crond 之外,如何使用 systemd 内建的 time 来处理各种任务

使用 systemd.timer 的原因:

  • 由于所有的 systemd 的服务产生的信息都会被纪录 (log),因此crond debug 上面要更清楚方便的多;
  • 各项 timer 的工作可以跟 systemd 的服务相结合;
  • 各项 timer 的工作可以跟 control group (cgroup,用来取代 /etc/secure/limit.conf 的功能) 结合,来限制该工作的资源利用

使用 systemd timer 功能,你必须要有几个要件:

  • 系统的 timer.target 一定要启动
  • 要有个 sname.service 的服务存在 (sname 是你自己指定的名称)
  • 要有个 sname.timer 的时间启动服务存在

sname.timer 的设定值

/etc/systemd/system 底下去建立这个 *.timer 档,那这个文件的内容要项有哪些东西呢?基本设定主要有底下这些: (man systemd.timer & man systemd.time)

[Timer]  部份

设定参数

参数意义说明

OnActiveSec

当 timers.target 启动多久之后才执行这只 unit

OnBootSec

当开机完成后多久之后才执行

 

OnStartupSec

当 systemd 第一次启动之后过多久才执行

 

OnUnitActiveSec

这个 timer 配置文件所管理的那个 unit 服务在最后一次启动后,隔多久后再执行一次的意思

OnUnitInactiveSec

这个 timer 配置文件所管理的那个 unit 服务在最后一次停止后,隔多久再执行一次的意思。

 

OnCalendar

使用实际时间 (非循环时间) 的方式来启动服务的意思!至于时间的格式后续再来谈。

 

 

Unit

一般来说不太需要设定, 因此如同上面刚刚提到的, 基本上我们设定都是 sname.server  +

sname.timer,那如果你的 sname  并不相同时,那在 .timer  的文件中, 就得要指定是哪一个

service unit 啰!

 

Persistent

当使用 OnCalendar  的设定时,指定该功能要不要持续进行的意思。通常是设定为 yes ,比较能够满足类似 anacron 的功能喔!

使用于 OnCalendar 的时间

如果你想要从 crontab 转成这个 timer 功能的话,那么对于时间设定的格式就得要了解了解~基本上的格式如下所示:

语法:英文周名  YYYY-MM-DD HH:MM:SS

  范例:Thu    2015-08-13 13:40:00

上面谈的是基本的语法,你也可以直接使用间隔时间来处理!常用的间隔时间单位有:

  • us usec:微秒 (10-6 )
  • ms msec:毫秒 (10-3 )
  • s, sec, second, seconds
  • m, min, minute, minutes
  • h, hr, hour, hours
  • d, day, days
  • w, week, weeks
  • month, months
  • y, year, years

常见的使用范例有:

隔 3 小时:             3h  或 3hr 或 3hours

隔 300 分钟过 10 秒:   10s 300m

隔 5 天又 100 分钟:    100m 5day

# 通常英文的写法,小单位写前面,大单位写后面~所以先秒、再分、再小时、再天数等~

此外,你也可以使用英文常用的口语化日期代表,例如 today, tomorrow 等!假设今天是 2015-08-13

13:50:00 的话,那么:

英文口语

实际的时间格式代表

 

now

 

Thu 2015-08-13 13:50:00

 

today

 

Thu 2015-08-13 00:00:00

 

tomorrow

 

Thu 2015-08-14 00:00:00

 

hourly

 

*-*-* *:00:00

daily

*-*-* 00:00:00

weekly

Mon *-*-* 00:00:00

 

monthly

 

*-*-01 00:00:00

 

+3h10m

 

Thu 2015-08-13 17:00:00

2015-08-16

Sun 2015-08-16 00:00:00

  • 一个循环时间运作的案例

现在假设这样:

  • 开机后 2 小时开始执行一次这个 backup.service
  • 自从第一次执行后,未来我每两天要执行一次 backup.service

好了,那么应该如何处理这个脚本呢?可以这样做喔!

 vim /etc/systemd/system/backup.timer

[Unit]

Description=backup my server timer

[Timer]

OnBootSec=2hrs

OnUnitActiveSec=2days

[Install]

WantedBy=multi-user.target

# 只要这样设定就够了!储存离开吧!

systemctl daemon-reload

systemctl enable backup.service

systemctl restart backup.service

systemctl show timers.target

systemctl show backup.service

systemctl show backup.timer

  • 一个固定日期运作的案例

上面的案例是固定周期运作一次,那如果我希望不管上面如何运作了,我都希望星期天凌晨 2 点运作这个备份程序一遍呢?请注意,因为已经存在 backup.timer 了! 所以,这里我用 backup2.timer 做区隔喔!

vim /etc/systemd/system/backup2.timer

[Unit]

Description=backup my server timer2

[Timer]

OnCalendar=Sun *-*-* 02:00:00

Persistent=true

Unit=backup.service

[Install]

WantedBy=multi-user.target

systemctl daemon-reload

systemctl enable bakeup2.timer

systemctl start backup2.timer

systemctl show backup2.timer

与循环时间运作差异比较大的地方,在于这个 OnCalendar 的方法对照的时间并不是 times.target 启动时间,而是 Unix 标准时间! 亦即是 1970-01-01 00:00:00 去比较的!因此,当你看到最后出NextElapseUSecRealtime 时,哇!下一次执行还要 45  + 个月 + + + 10  小时过30 分~刚看到的时候,鸟哥确实因此揉了揉眼睛~确定没有看错...这才了解原来比对的是『日历时间』而不是某个 unit 的启动时间啊!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值