前几天,我碰到一个CentOS 7 32位的发行版,我觉得测试它的旧的32位计算机上的愿望。 开机后我意识到,它有一个缺陷,它是失去的网络连接,我不得不把它“上升”手动开机后每次。 所以,问题是如何设置一个脚本做这个工作,每次我启动我的机器运行?
好吧,这很简单,我会向您展示使用服务单元的systemd方式。 但首先简要介绍一下服务单位。
在这篇文章中,我打算去解释什么是“服务单位”systemd是,如何轻松地创建和运行一个。 我会尽量简化什么是“目标”是,为什么我们称他们为“单位集合”,什么是他们的“希望”。 最后,我们利用服务单元在引导过程之后运行我们自己的脚本。
很明显,您的计算机是有用的,由于它提供的服务,为了有这个功能,许多服务必须被称为计算机引导和达到不同的水平。 其他的服务被调用时,当它到达多用户级别( 级别3)的计算机到达例如救援水平( 运行级别0)和其他被执行。 你可以想像这些水平的目标 。
以简单的方式target是服务单元的集合。 如果你想看看你的graphical.target水平,键入运行服务单位:
# systemctl --type=service
列出CentOS 7中的所有服务单元
正如你所看到的一些服务是活动的,“跑”的所有时间,而其他运行一次并终止(退出)。 如果要检查服务的状态,请键入:
# systemctl status firewalld.service
检查CentOS 7中的服务状态
正如你可以看到我检查的状态firewalld.service
( 提示:你可以使用自动完成该服务的名称)。 它告诉我,firewalld服务正在运行的所有的时间,它已启用。
不要错过: 如何在CentOS 7配置FirewallD服务
启用和禁用表示在下次引导期间,服务将永久加载或不加载。 另一方面,启动和停止服务具有当前会话的限制,它不是永久的。
例如,如果您键入:
# systemctl stop firewalld.service # systemctl status firewalld.service
管理CentOS 7中的服务
你可以看到, firewalld.service
处于非活动状态(死),但它仍处于启用状态,这意味着下次开机时就会被加载。 因此,如果我们想要在将来的引导期间加载服务,我们必须启用它。 什么是一个伟大的结论! 让我们创建一个,很容易。
如果你去的文件夹:
# cd /etc/systemd/system # ls -l
SystemD系统文件
你可以看到单位服务的一些链接文件和目标的“欲望”的一些目录。 例如:什么样的多用户目标时,要在引导过程达到其级别要加载,列出与名称/etc/systemd/system/multi-user.target.wants/的目录。
# ls multi-user.target.wants/
多用户目标服务
正如你可以看到它并不只包含的服务 ,还包括其他指标这也是服务的集合。
让我们做一个服务单位的名称connection.service。
# vim connection.service
并键入以下(打“i”
为插入模式),保存并退出(有“esc”
和“:wq!”
[Unit] Description = making network connection up After = network.target [Service] ExecStart = /root/scripts/conup.sh [Install] WantedBy = multi-user.target
在CentOS 7中创建新的服务单元
为说明上述情况:我们已经创建的服务类型的单位(你也可以创建目标类型的单位),我们将其设置为network.target后加载(你可以理解,在引导过程达到一个定义的目标顺序),我们希望每一次服务启动名为conup.sh,我们将创建执行bash脚本。
这项活动开始于最后一部分[安装]。 它告诉将由“multi-user.target”被通缉。 因此,如果我们让我们的服务,该服务的符号链接将多user.target.wants文件夹内创建! 得到它了? 如果我们禁用它的链接将被删除。 很简单。
只需启用它并检查:
# systemctl enable connection.service
它告诉我们, 在多user.target.wants文件夹中的符号链接已创建。 核实:
# ls multi-user.target.wants/
在CentOS 7中启用服务
正如你所看到的“connection.service”已准备好下次启动,但我们必须先创建脚本文件。
# cd /root # mkdir scripts # cd scripts # vim conup.sh
添加下面一行Vim内部并保存:
#!/bin/bash nmcli connection up enp0s3
当然,如果你想要你的脚本执行别的东西,你可以输入任何你想要的,而不是第二行。
例如,
#!/bin/bash touch /tmp/testbootfile
将里面创建一个文件/ tmp文件夹(只是为了检查您的服务工作)。
我们还必须使脚本可执行:
# chmod +x conup.sh
现在我们准备好了。 如果你不想等待下一次启动(它已经启用),我们可以启动当前会话类型的服务:
# systemctl start connection.service
Voila! 我的连接正常运行!
如果你已经选择了写命令“Touch的/ tmp / testbootfile”的剧本里面,只是为了检查其功能,你会看到/中创建该文件临时文件夹中 。
确认服务状态
我真的希望帮助你弄清楚在启动期间什么服务,想要,目标和运行脚本是关于。