一:简单的例子
在CentOS7之后自定义开机启动服务,可以通过创建一个systemd服务单元文件来实现。以下是创建自定义服务并设置其开机启动的步骤:
1,编辑服务文件,并添加以下内容:
[Unit]
Description=My custom startup service
After=network.target[Service]
Type=simple
ExecStart=/usr/local/bin/my_service.sh[Install]
WantedBy=multi-user.target
2,使服务文件可执行:
chmod +x /etc/systemd/system/my_service.service
3,重新加载systemd管理器配置:
systemctl daemon-reload
4,启用服务以在开机时启动:
systemctl enable my_service.service
5,(可选)立即启动服务,而不需要重启:
systemctl start my_service.service
二:语法
1,文件存放
CentOS 7的服务systemctl脚本存放在/usr/lib/systemd/,有系统(system)和用户(user)之分,需要开机不登陆就能运行的程序,还是存在系统服务里,即/usr/lib/systemd/system目录下。每一个服务以.service结尾,一般会分为3部分:[Unit]、[Service]和[Install]
2, gdm例子
cat gdm.service
[Unit]
Description=GNOME Display Manager# replaces the getty
Conflicts=getty@tty1.service
After=getty@tty1.service# replaces plymouth-quit since it quits plymouth on its own
Conflicts=plymouth-quit.service
After=plymouth-quit.service# Needs all the dependencies of the services it's replacing
# pulled from getty@.service and plymouth-quit.service
# (except for plymouth-quit-wait.service since it waits until
# plymouth is quit, which we do)
After=rc-local.service plymouth-start.service systemd-user-sessions.service# GDM takes responsibility for stopping plymouth, so if it fails
# for any reason, make sure plymouth still stops
OnFailure=plymouth-quit.service[Service]
ExecStart=/usr/sbin/gdm
ExecStartPost=-/bin/bash -c "TERM=linux /usr/bin/clear > /dev/tty1"
KillMode=mixed
Restart=always
IgnoreSIGPIPE=no
BusName=org.gnome.DisplayManager
StandardOutput=syslog
StandardError=inherit
EnvironmentFile=-/etc/locale.conf
ExecReload=/bin/kill -SIGHUP $MAINPID[Install]
Alias=display-manager.service
首先,gdm.service是一个systemd服务单元文件,用于定义GNOME Display Manager (GDM)的启动、停止和管理方式。Systemd是Linux系统的一个初始化系统和服务管理器,它用于启动和管理系统服务。接下来,我会逐段解释这个文件的内容:
[Unit]Description=GNOME Display Manager:为服务提供一个描述,这里是“GNOME Display Manager”。
Conflicts=getty@tty1.service 和 After=getty@tty1.service:这表示GDM与getty@tty1.service有冲突,并且GDM应在getty@tty1.service之后启动。
Conflicts=plymouth-quit.service 和 After=plymouth-quit.service:同样,这表示GDM与plymouth-quit.service有冲突,并且GDM应在plymouth-quit.service之后启动。
After=rc-local.service plymouth-start.service systemd-user-sessions.service:这表示GDM应在这些服务之后启动。
OnFailure=plymouth-quit.service:如果GDM启动失败,则尝试启动plymouth-quit.service。
[Service]ExecStart=/usr/sbin/gdm:定义启动GDM的命令。
ExecStartPost=-/bin/bash -c "TERM=linux /usr/bin/clear > /dev/tty1":在GDM启动后执行的命令。这里使用bash来清除/dev/tty1的内容。
KillMode=mixed:定义如何停止服务。mixed意味着首先尝试SIGTERM,然后SIGKILL。
Restart=always:无论何种情况,只要GDM退出,就总是重启它。
IgnoreSIGPIPE=no:是否忽略SIGPIPE信号。在这里,我们不忽略它。
BusName=org.gnome.DisplayManager:服务的DBus名称。
StandardOutput=syslog:将标准输出发送到系统日志。
StandardError=inherit:标准错误继承父进程的设置。
EnvironmentFile=-/etc/locale.conf:加载/etc/locale.conf文件以设置环境变量。
ExecReload=/bin/kill -SIGHUP $MAINPID:重新加载服务的命令。这里发送SIGHUP信号给主进程。
[Install]Alias=display-manager.service:为服务定义一个别名,这样你可以使用display-manager.service来引用这个服务。
总的来说,这个服务单元文件定义了GDM的启动方式、依赖关系、启动后的操作以及重启策略等。它是systemd用来管理GDM服务的关键配置文件。