LabHub
学习 学习路径 课程

LFCS — Linux 基金会认证系统管理员

编写 unit 文件与调度配置

在 LabHub 中继续学习

目标

systemd 单元文件和定时器、Cron 文件、日志轮换设置、插入覆盖遵守语法和部分规则亲自写。

为什么重要

这个实习环境是systemctl因为这个被堵住了,所以无法启动服务。所以评分全部用文件内容进行。虽然乍一看好像是损失,但实际上会准确地集中在考试中最容易出错的地方——在LFCS中错过单元题的原因不是因为服务无法启动,而是指示词放在了错误的章节或格式错误WantedBy[Service]用的话不能激活,计时器的WantedBymulti-user.target不是这个timers.target并且,/etc/cron.d文件中再包含一个用户字段。在下拉式菜单中ExecStart更换时,如果不一次性清空空格,就会变成两个命令,导致机动失败。这是完全只看文件就能解决的错误。

阶段

  1. /root/lfcs-svc/lfcs-api.service制作并[Unit][Service][Install]请按这个顺序放置三个部分。[Unit]里面没有空的值Description=请放进去。
  2. 在同一个文件中After=network-online.targetWants=network-online.targetType=simpleExecStart=/usr/local/bin/lfcs-api --port 8080Restart=on-failureRestartSec=5User=lfcsapiWantedBy=multi-user.target请分别在合适的章节中填写。
  3. /root/lfcs-svc/lfcs-backup.timer[Timer]章节和OnCalendar=*-*-* 03:30:00Persistent=trueUnit=lfcs-backup.service放入并WantedBy=timers.target请激活。匹配的/root/lfcs-svc/lfcs-backup.service里面有Type=oneshotExecStart=/usr/local/bin/lfcs-backup.sh请放入。
  4. /etc/cron.d/lfcs-report制作并*/15 * * * * root /usr/local/bin/lfcs-report.sh插入以开始的字符串,但输出为/var/log/lfcs-report.log请发到那里。
  5. /root/lfcs-svc/lfcsops.crontab以用户crontab格式30 2 * * 1-5 /usr/local/bin/lfcs-rotate.sh请输入。这个格式没有用户字段。
  6. /etc/cron.d/lfcs-report在...之前,而不是...之后。SHELL=/bin/bashPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin请输入两行。
  7. /root/lfcs-svc/lfcs-report.logrotate/var/log/lfcs-report.log制作区块dailyrotate 14compressdelaycompressmissingoknotifemptycreate 0640 root adm请放进去。
  8. /root/lfcs-svc/lfcs-api.service.d/override.conf制作[Service]下面是空的值ExecStart=先放下,然后ExecStart=/usr/local/bin/lfcs-api --port 9090MemoryMax=512M请放进去。

参考

制作单元文件骨架

/root/lfcs-svc/lfcs-api.service制作并[Unit][Service][Install]请按这个顺序放置三个部分。[Unit]里面没有空的值Description=请放进去。

单元文件是INI格式,部分名称用括号包裹。请准确地匹配三个部分的顺序和大小写。

执行·重新启动·激活指令

在同一个文件中After=network-online.targetWants=network-online.targetType=simpleExecStart=/usr/local/bin/lfcs-api --port 8080Restart=on-failureRestartSec=5User=lfcsapiWantedBy=multi-user.target请分别在合适的章节中填写。

每个指令都确定了属于哪个部分。启用对象放在[Install],执行方式放在[Service],顺序依赖放在[Unit]。

与计时器单元配对服务

/root/lfcs-svc/lfcs-backup.timer[Timer]章节和OnCalendar=*-*-* 03:30:00Persistent=trueUnit=lfcs-backup.service放入并WantedBy=timers.target请激活。匹配的/root/lfcs-svc/lfcs-backup.service里面有Type=oneshotExecStart=/usr/local/bin/lfcs-backup.sh请放入。

计时器不会自己工作,而是唤醒同名单元。在关闭期间,有一个单独的指令可以让它追赶已完成的任务。

/etc/cron.d文件编写

/etc/cron.d/lfcs-report制作并*/15 * * * * root /usr/local/bin/lfcs-report.sh插入以开始的字符串,但输出为/var/log/lfcs-report.log请发到那里。

系统Cron文件在时间5字段后再加一个执行用户字段。如果不留下输出,Cron会尝试通过邮件发送。

用户crontab格式

/root/lfcs-svc/lfcsops.crontab以用户crontab格式30 2 * * 1-5 /usr/local/bin/lfcs-rotate.sh请输入。这个格式没有用户字段。

用户crontab中没有用户字段。在日期字段中,范围用连字符写。

cron的PATH问题

/etc/cron.d/lfcs-report在...之前,而不是...之后。SHELL=/bin/bashPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin请输入两行。

环境变量行必须在一定行之前才能应用。cron默认提供的PATH比登录shell短得多,这就是这一步的原因。

日志旋转设置

/root/lfcs-svc/lfcs-report.logrotate/var/log/lfcs-report.log制作区块dailyrotate 14compressdelaycompressmissingoknotifemptycreate 0640 root adm请放进去。

在目标路径后面打开中括号块,逐行输入指令。旋转后有一个指令,指定要创建的新文件的权限和所有权。

Drop-in覆盖

/root/lfcs-svc/lfcs-api.service.d/override.conf制作[Service]下面是空的值ExecStart=先放下,然后ExecStart=/usr/local/bin/lfcs-api --port 9090MemoryMax=512M请放进去。

Drop-in目录名是以单元文件名加上后缀的形式。列表式指令如果没有先放置空值行,则会添加到现有值中。