对于 systemctl 来说相当陌生,我想在启动 centos 时在控制台上显示我的虚拟机 IP 地址。
我创建了一项服务并启用它:
[root@centos-3 system]# cat show-ip-on-boot.service
[Unit]
Description=Show IP of eno interface on boot
[Service]
Type=oneshot
ExecStart=/usr/bin/show-ip-on-boot.sh
[Install]
WantedBy=multi-user.target
“show-ip-on-boot.sh”脚本是:
#!/bin/sh
ip a | grep "inet" | grep "eno" | awk -F/ '{print $1}' | awk '{print $2}'
当我手动启动服务时,我可以在日志中看到它正在工作:
[root@centos-3 ~]# journalctl -u show-ip-on-boot
-- Logs begin at Thu 2016-10-06 13:59:38 CEST, end at Thu 2016-10-06 14:15:37 CEST. --
Oct 06 14:04:32 centos-3.localdomain systemd[1]: Starting Show IP of eno interface on boot...
Oct 06 14:04:32 centos-3.localdomain show-ip-on-boot.sh[2180]: 192.168.0.43
Oct 06 14:04:32 centos-3.localdomain systemd[1]: Started Show IP of eno interface on boot.
但我怎样才能看到它在启动时显示在控制台上?我应该在我的脚本中添加一些东西吗?
另外,当我重新启动时,我可以在日志中看到该服务已启动但不执行命令:
[root@centos-3 ~]# systemctl status show-ip-on-boot.service
â show-ip-on-boot.service - Show IP of eno interface on boot
Loaded: loaded (/etc/systemd/system/show-ip-on-boot.service; enabled; vendor preset: disabled)
Active: inactive (dead) since Thu 2016-10-06 13:33:55 CEST; 1min 52s ago
Process: 740 ExecStart=/usr/bin/show-ip-on-boot.sh (code=exited, status=0/SUCCESS)
Main PID: 740 (code=exited, status=0/SUCCESS)
Oct 06 13:33:54 centos-3.localdomain systemd[1]: Starting Show IP of eno interface on boot...
Oct 06 13:33:55 centos-3.localdomain systemd[1]: Started Show IP of eno interface on boot.
我可能错过了 systemd 概念中的一些东西...您能给我关于此事的提示吗?谢谢。
答案1
systemd 收集服务的输出并将其记录在日志中(因为这通常是您想要的,因此服务的输出是持久的)。
StandardOutput
您可以通过设置和StandardError
选项来更改特定服务的行为,如系统执行(5)手册页显示:
StandardOutput=
控制已执行进程的文件描述符 1 (STDOUT) 连接到的位置。采用inherit、null、tty、journal、syslog、kmsg、journal+console、syslog+console、kmsg+console 或socket 之一。
[...]
journal+console
,syslog+console
其kmsg+console
工作方式与上述三个选项类似,但也将输出复制到系统控制台。
所以从理论上讲,类似这样的事情应该可以解决问题:
[Service]
Type=oneshot
ExecStart=/usr/bin/show-ip-on-boot.sh
StandardOutput=journal+console
答案2
不需要服务只需在 /etc/issue 文件中添加一行即可。在我的 /etc/issue 文件下面:
\S
内核 \r 位于 \m 上
我的 IP 地址:\4{enp0s3} <----- 添加行,
在 VirtualBox 中使用 Centos 7。
“enp03s”是我想知道IP的网络接口卡。