我试图阻止用户在没有从机器上物理移除闪存卡的情况下关闭或重新启动。为此,我编写了一个 SystemD 服务 removeflash.service:
[Unit]
Description=Prompt user to remove flash card
[Service]
ExecStop=/usr/lib/systemd/flashshutdown.sh
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Requires=rsyslog.service
flashshutdown.sh 是一个 bash 脚本,如下:
#! /bin/bash
#
while [ -e /dev/flash ] ; do
echo "Please remove flash card"
logger "GHB: Please remove flash card"
sleep 5
done
我没想到 echo 在关机时会做任何事情,但事实并非如此。但是,我希望 logger 命令能够工作。没有Requires=rsyslog.service,我的服务在rsyslog.service关闭后退出;我插入了防止这种情况发生的要求,但唯一的区别是 removeflash.service 的关闭在关闭顺序中更早。幸运的是,systemd 本身向控制台输出一条消息,表明它正在运行一个作业,提示用户移除闪存卡,从而挽救了服务的目的。
向控制台发出消息的正确方法是什么?