内容提要
systemd是管理系统中各种服务的强大工具。本文介绍了如何使用systemd进行时间同步、磁盘挂载和定时任务执行。通过禁用本地NTP服务并启动systemd-timesyncd,可以实现时间同步。要使用systemd挂载磁盘,需要创建一个包含适当配置的.mount文件。还可以使用服务和定时器文件配置systemd来执行定时任务。
延伸解读
时间同步:从 chrony 切换到 systemd-timesyncd 的注意事
文章以 chrony 为例,说明使用 systemd-timesyncd 前需先禁用本地 NTP 服务。若 systemd-timesyncd 被屏蔽,需先执行 unmask;若提示服务不存在,则需安装 systemd-timesyncd 包。修改 NTP 服务器需编辑 /etc/systemd/timesyncd.conf,重启服务并设为开机启动。这些步骤表明,切换时间同步方案时,需依次处理服务屏蔽、软件包缺失和配置更新等问题。
磁盘挂载:.mount 文件命名必须与挂载路径一致
使用 systemd 挂载 NFS 时,需创建 .mount 文件,且文件名必须与挂载路径匹配。例如挂载点为 /root/test,则文件名应为 root-test.mount,否则会报错“Where= setting doesn't match unit name”。文件内容需包含 [Unit]、[Mount] 和 [Install] 部分,指定 What、Where、Type 等参数。创建后可用 systemctl start 启动挂载,stop 卸载,enable 设置开机自动挂载。
定时任务:service 与 timer 配合实现周期执行
systemd 定时任务需分别创建 .service 和 .timer 文件。service 定义要执行的任务,如示例中通过 ExecStart 将日期写入 /var/date.log;timer 则通过 OnCalendar 设定执行时间,示例中配置为每分钟执行一次。启动 timer 后,可用 systemctl status 检查状态。这种方式将任务定义与调度分离,便于管理和排查。
Q&A
如何用 systemd 实现系统时间同步?
首先禁用本地 NTP 服务(如 chrony),然后启动 systemd-timesyncd 服务。如果服务被屏蔽,使用 systemctl unmask systemd-timesyncd 解除屏蔽;如果未安装,使用 apt-get install systemd-timesyncd 安装。之后可以编辑 /etc/systemd/timesyncd.conf 修改 NTP 服务器,最后重启服务并设置开机启动。
systemd-timesyncd 服务被屏蔽了怎么办?
如果 systemd-timesyncd 服务被屏蔽,可以使用 systemctl unmask systemd-timesyncd 命令解除屏蔽,然后启动服务。
如何修改 systemd-timesyncd 使用的 NTP 服务器?
编辑 /etc/systemd/timesyncd.conf 文件,在 [Time] 部分设置 NTP 参数,例如 NTP=cn.ntp.org.cn,然后重启 systemd-timesyncd 服务并设置开机启动。
怎么用 systemd 挂载 NFS 磁盘?
创建一个 .mount 文件,文件名必须与挂载路径一致(例如挂载到 /root/test 则文件名为 root-test.mount),内容包含 [Unit]、[Mount] 和 [Install] 部分,指定 What、Where、Type 等。然后使用 systemctl start root-test.mount 启动挂载,systemctl enable root-test.mount 设置开机启动。
systemd 的 .mount 文件命名有什么要求?
.mount 文件的文件名必须与挂载路径一致。例如挂载路径为 /root/test,则文件名必须是 root-test.mount,否则会报错:Where= setting doesn't match unit name. Refusing.
如何用 systemd 配置定时任务?
首先创建一个 .service 文件定义要执行的任务,然后创建一个 .timer 文件来调度执行。例如,创建 date.service 和 logdate.timer,在 timer 中设置 OnCalendar 指定执行时间,然后启动 timer 并设置开机启动。
systemd 定时任务如何设置为每分钟执行一次?
在 .timer 文件中设置 OnCalendar=*-*-* *:*:00,这表示每分钟执行一次。例如,在 logdate.timer 中这样配置,然后启动该 timer。