编写 unit 文件与调度配置
目标
systemd 单元文件和定时器、Cron 文件、日志轮换设置、插入覆盖遵守语法和部分规则亲自写。
为什么重要
这个实习环境是systemctl因为这个被堵住了,所以无法启动服务。所以评分全部用文件内容进行。虽然乍一看好像是损失,但实际上会准确地集中在考试中最容易出错的地方——在LFCS中错过单元题的原因不是因为服务无法启动,而是指示词放在了错误的章节或格式错误。WantedBy的[Service]用的话不能激活,计时器的WantedBy是multi-user.target不是这个timers.target并且,/etc/cron.d文件中再包含一个用户字段。在下拉式菜单中ExecStart更换时,如果不一次性清空空格,就会变成两个命令,导致机动失败。这是完全只看文件就能解决的错误。
阶段
/root/lfcs-svc/lfcs-api.service制作并[Unit],[Service],[Install]请按这个顺序放置三个部分。[Unit]里面没有空的值Description=请放进去。- 在同一个文件中
After=network-online.target,Wants=network-online.target,Type=simple,ExecStart=/usr/local/bin/lfcs-api --port 8080,Restart=on-failure,RestartSec=5,User=lfcsapi,WantedBy=multi-user.target请分别在合适的章节中填写。 /root/lfcs-svc/lfcs-backup.timer在[Timer]章节和OnCalendar=*-*-* 03:30:00,Persistent=true,Unit=lfcs-backup.service放入并WantedBy=timers.target请激活。匹配的/root/lfcs-svc/lfcs-backup.service里面有Type=oneshot科ExecStart=/usr/local/bin/lfcs-backup.sh请放入。/etc/cron.d/lfcs-report制作并*/15 * * * * root /usr/local/bin/lfcs-report.sh插入以开始的字符串,但输出为/var/log/lfcs-report.log请发到那里。/root/lfcs-svc/lfcsops.crontab以用户crontab格式30 2 * * 1-5 /usr/local/bin/lfcs-rotate.sh请输入。这个格式没有用户字段。/etc/cron.d/lfcs-report在...之前,而不是...之后。SHELL=/bin/bash哇PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin请输入两行。/root/lfcs-svc/lfcs-report.logrotate在/var/log/lfcs-report.log制作区块daily,rotate 14,compress,delaycompress,missingok,notifempty,create 0640 root adm请放进去。/root/lfcs-svc/lfcs-api.service.d/override.conf制作[Service]下面是空的值ExecStart=先放下,然后ExecStart=/usr/local/bin/lfcs-api --port 9090科MemoryMax=512M请放进去。
参考
- 在这个环境中
systemctl这个动作不起作用。评分只用文件内容进行。如果是实际服务器的话systemd-analyze verify看一下语法systemctl daemon-reload反映为。 StartLimitIntervalSec科StartLimitBurst是[Service]不是去[Unit]这是部分指示词。ExecStart=因为systemd不会经过shell,所以管道和重定向无法通过。- 常见的错误:
/etc/cron.d如果下面的文件名中包含点,则会被忽略。请不要附加扩展名。
制作单元文件骨架
/root/lfcs-svc/lfcs-api.service制作并[Unit],[Service],[Install]请按这个顺序放置三个部分。[Unit]里面没有空的值Description=请放进去。
单元文件是INI格式,部分名称用括号包裹。请准确地匹配三个部分的顺序和大小写。
执行·重新启动·激活指令
在同一个文件中After=network-online.target,Wants=network-online.target,Type=simple,ExecStart=/usr/local/bin/lfcs-api --port 8080,Restart=on-failure,RestartSec=5,User=lfcsapi,WantedBy=multi-user.target请分别在合适的章节中填写。
每个指令都确定了属于哪个部分。启用对象放在[Install],执行方式放在[Service],顺序依赖放在[Unit]。
与计时器单元配对服务
/root/lfcs-svc/lfcs-backup.timer在[Timer]章节和OnCalendar=*-*-* 03:30:00,Persistent=true,Unit=lfcs-backup.service放入并WantedBy=timers.target请激活。匹配的/root/lfcs-svc/lfcs-backup.service里面有Type=oneshot科ExecStart=/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/bash哇PATH=/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制作区块daily,rotate 14,compress,delaycompress,missingok,notifempty,create 0640 root adm请放进去。
在目标路径后面打开中括号块,逐行输入指令。旋转后有一个指令,指定要创建的新文件的权限和所有权。
Drop-in覆盖
/root/lfcs-svc/lfcs-api.service.d/override.conf制作[Service]下面是空的值ExecStart=先放下,然后ExecStart=/usr/local/bin/lfcs-api --port 9090科MemoryMax=512M请放进去。
Drop-in目录名是以单元文件名加上后缀的形式。列表式指令如果没有先放置空值行,则会添加到现有值中。