Centos7 编写开机监测gdm服务退出的脚本

编写一个脚本,如何通过systemctl status gdm来判断gdm服务已经停止,如果停止后,需要systemctl start gdm启动gdm服务,以下是一个简单的脚本示例,它会检查gdm服务的状态,如果服务已经停止,它会启动gdm服务。

保存以下脚本到一个文件,例如check_and_start_gdm.sh,并确保它有执行权限(使用chmod +x check_and_start_gdm.sh命令)。

#!/bin/bash

set -x
# 检查gdm服务是否已安装
if ! systemctl list-units --type=service --all | grep -q gdm; then
    echo "gdm is not be installed, no need to check" | logger -t gdm_start_script
    exit 1
fi

# 检查启动次数文件是否存在,如果不存在则初始化
count_file=/var/lib/gdm/gdm_start_count
if [[ ! -f $count_file ]]; then
    echo "0" > $count_file
fi

while true; do
        # 检查gdm服务的状态
        service_status=$(systemctl is-active gdm)

        # 读取启动次数
        start_count=$(cat ${count_file})

        # 判断服务状态
        if [[ $service_status == "inactive" ]]; then
                echo "$(date): gdm服务已经停止,正在启动..." | logger -t gdm_start_script

                # 启动gdm服务
                systemctl start gdm

                # 增加启动次数
                start_count=$((start_count + 1))
                echo "$start_count" > $count_file

                echo "$(date): gdm already bringup, counts: $start_count" | Logger -t gdm_start_script
        else
                echo "$(date): gdm is running"
        fi

         # 等待10秒
         sleep 10
done

set +x
 

 

其中

systemctl list-units --type=service --all

这个命令会列出所有服务单元,包括那些处于激活状态(active)、停止状态(inactive)、失败状态(failed)等。

以上代码:

1,创建了一个/var/lib/gdm_start_count文件来记录gdm的启动次数。如果文件不存在,则初始化为0。
2,在启动gdm服务前后,使用echo和Logger命令将相关信息发送到syslog。-t选项用于指定日志标签,便于识别。
3,在每次启动gdm服务时,都会增加/var/lib/gdm_start_count文件中的计数。

日志: 

接着就可以配置服务了: 

1. 创建服务单元文件

首先,你需要创建一个systemd服务单元文件。我们将这个文件命名为check_and_start_gdm.service,并将其放在/etc/systemd/system/目录下。使用你喜欢的文本编辑器(如vinano)创建并编辑该文件。

sudo vi /etc/systemd/system/check_and_start_gdm.service

然后,将以下内容粘贴到文件中:

[Unit]
Description=Check and Start GDM Service
After=network.target

[Service]
Type=simple
ExecStart=/path/to/check_and_start_gdm.sh
Restart=on-failure
User=root

[Install]
WantedBy=multi-user.target

 

确保将/path/to/check_and_start_gdm.sh替换为check_and_start_gdm.sh脚本的实际路径。

2. 使脚本可执行

确保你的脚本是可执行的。如果之前已经设置过执行权限,可以跳过这一步。否则,运行以下命令:

sudo chmod +x /path/to/check_and_start_gdm.sh

3. 重新加载systemd配置

每次创建或修改systemd服务单元文件后,都需要重新加载systemd的配置,以便它知道新的服务。运行以下命令来重新加载配置:

sudo systemctl daemon-reload

4. 启用服务

要使服务在开机时自动启动,你需要启用它。运行以下命令来启用服务:、

sudo systemctl enable check_and_start_gdm.service

5. 启动服务

现在,你可以手动启动服务来测试它是否工作正常:

sudo systemctl start check_and_start_gdm.service

如果一切顺利,服务应该会启动,并且gdm也应该被正确检查并启动(如果需要的话)。

6. 检查服务状态

要检查服务的状态,可以使用以下命令:

sudo systemctl status check_and_start_gdm.service

这将显示服务的当前状态,包括是否正在运行,最近一次启动或停止的时间等信息。

7. 设置服务开机自启

如果在第4步中启用了服务,那么它应该已经设置为开机自启。要确认这一点,可以查看服务是否已设置为开机自启:

sudo systemctl is-enabled check_and_start_gdm.service

如果输出为enabled,则表示服务已设置为开机自启。

8. 可能的错误和调试

如果在任何步骤中遇到问题,检查系统日志可能会提供有关错误的更多信息。使用以下命令查看系统日志:

sudo journalctl -u check_and_start_gdm.service

这将显示与check_and_start_gdm.service相关的日志条目,包括任何启动失败或错误消息。

遵循这些步骤后,你的check_and_start_gdm.sh脚本应该已经作为一个CentOS服务设置好了,并且会在系统启动时自动运行。

在/etc/systemd/system目录下出现很多后缀为.wants的目录,如getty.target.wants,sysinit.target.wants, 为什么需要这些目录,照理可以直接写对应的service文件

在 systemd 的目标(target)和服务(service)体系中,.wants 目录是一种特殊的目录结构,用于表示依赖关系。这些目录不是必需的,但它们提供了一种机制来组织和管理服务与目标之间的依赖关系。

让我们深入了解一下为什么需要这些 .wants 目录:

  1. 依赖管理:systemd 使用目标和服务来组织和管理系统启动和运行时的服务。一个目标通常代表系统的某个运行级别或模式(如 multi-user.targetgraphical.target 等)。服务则是实际运行的程序或守护进程。.wants 目录允许您指定当某个目标被激活时,哪些服务应该同时启动。
  2. 灵活性:通过使用 .wants 目录,您可以轻松地为目标添加或删除依赖服务,而无需修改目标文件本身。这提供了更大的灵活性,因为您可以在不更改系统核心配置的情况下,通过添加或删除 .wants 目录中的符号链接来修改服务依赖。
  3. 易于管理:将服务文件放在 .wants 目录中,使得管理服务的依赖关系变得更为直观和简单。管理员可以轻松地查看哪些服务被包含在特定的目标中,以及哪些服务依赖于其他服务。
  4. 启用和禁用服务:通过使用 systemctl enable 和 systemctl disable 命令,管理员可以轻松地启用或禁用服务。这些命令实际上是在 .wants 目录中创建或删除符号链接。例如,如果您想在系统启动时自动启动某个服务,您可以使用 systemctl enable 命令在相应的 .wants 目录中创建一个符号链接。
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
CentOS 7中,你可以通过以下几种方法来添加开机启动服务脚本。 方法一:使用systemctl命令 1. 使用以下命令将服务设置为开机自启动: systemctl enable 服务名.service 例如,要将Jenkins服务设置为开机自启动,可以运行以下命令: systemctl enable jenkins.service 2. 使用以下命令启动服务: systemctl start 服务名.service 例如,要启动Jenkins服务,可以运行以下命令: systemctl start jenkins.service 方法二:使用/etc/rc.local文件 1. 编辑/etc/rc.local文件: vi /etc/rc.local 2. 在文件中添加需要在开机时运行的命令或脚本。 3. 确保/etc/rc.local文件具有可执行权限: chmod +x /etc/rc.local 方法三:使用/etc/rc.d/init.d/目录和chkconfig命令 1. 将编写好的启动脚本移动到/etc/rc.d/init.d/目录下: mv /path/to/脚本.sh /etc/rc.d/init.d/ 2. 添加脚本的可执行权限: chmod +x /etc/rc.d/init.d/脚本.sh 3. 使用chkconfig命令将脚本设置为开机启动: chkconfig --add 脚本.sh chkconfig 脚本.sh on 请注意,以上方法中的服务名或脚本名需要根据实际情况进行替换。另外,在使用/etc/rc.local文件时,需要注意权限问题,确保文件具有可执行权限。 #### 引用[.reference_title] - *1* *3* [CentOS 7添加开机启动服务/脚本](https://blog.csdn.net/qq_20967969/article/details/125149682)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [CentOS7如何设置开机自启动程序、开机自启动脚本?](https://blog.csdn.net/Dontla/article/details/125333850)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旗浩QH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值