在CentOS的systemctl / service调用期间的用户输入?

时间:2016-07-11 16:17:40

标签: linux centos user-input systemd

让我们说我有一项服务(比如rsyslog),当我停止它时,我想记录某人将其关闭的原因。表达这一点就是

systemctl start rsyslog
systemctl stop rsyslog

(在关闭rsyslog后开始提示用户为什么这样做)

#!/bin/bash
    echo "you are shutting down the syslog service. Please state your name and reason."
    read -p "[name?]" name && read -p "[reason?]" reason 
    logger $name:$reason

Modifying the Unit Files(位于/usr/lib/systemd/system/rsyslog.service中),为了包含脚本路径的ExecStop,我可以运行上面的脚本。我知道脚本工作正在检查日志消息显示:,这是传递给记录器的不可变部分。

我需要能够让这个脚本像所说的shell脚本一样运行某人试图关闭日志服务的瞬间。这意味着终端上会显示echo命令,并且可以使用read命令记录变量。

This may be similar to this persons question, but I can not understand it.

1 个答案:

答案 0 :(得分:1)

感谢Mark Stosberg在systemctl调用期间共享information about the systemd-ask-password command以获取用户输入。

对于那些不知道的人,systemd-ask-password命令是一个密码提示,可用于赞助systemd服务的所有机器。此命令的一个独特功能是它可以允许用户输入在systemctl / service调用期间。知道了这一点,人们可以提示他们喜欢的数据,这些数据完全集成到标准bash脚本中,允许在通话期间可能需要或可能不需要的交互。

以下是一个示例脚本:

#!/bin/bash
date=$(/bin/date)
echo "Rsyslog has been turned off at $date. Below is the name and reason"
name=`systemd-ask-password --echo --no-tty "name:"`
reason=`systemd-ask-password --echo --no-tty "reason for shutting down rsyslog:"`
echo LOG:$name:$reason:ENDLOG >>/var/log/messages

您必须确保在初始化任何服务时,使用/usr/lib/systemd/system/ExecStartExecStop下的单位文件进行更改[Service]标记等于脚本的路径。您可以找到other options you can here以及一些语法,并根据需要配置单元文件。