当前位置: 首页 > news >正文

Linux | 开机自启动设置多场景实现

注:本文为“Llinux 设置开机自启”相关文章合辑。

略作重排,未整理去重。
如有内容异常,请看原文。


Linux 设置开机自启动的三种方法

幽夜卡尔
2022-10-22

一、在 /etc/rc.local 文件中添加自启动命令

  1. 编辑文件:执行以下命令,编辑 /etc/rc.local 文件。

    vi /etc/rc.local
    
  2. 添加命令:在文件的最后一行添加要执行程序的全路径。例如,若每次开机时要执行位于 /usr 下的 hello.sh 脚本,可在 /etc/rc.local 中添加一行 /usr/./hello.shcd /usr/ && ./hello.sh。注意,命令应添加在 exit 0 之前。

  3. 设置权限:保存文件后,设置 /etc/rc.local 的可执行权限。

    chmod +x /etc/rc.local
    

img

二、在 /etc/init.d 目录下添加自启动脚本

Linux 系统在 /etc/rc.d/init.d 目录下有许多文件,这些文件均为可查看内容的 Shell 脚本或可执行二进制文件。Linux 开机时会加载并运行 /etc/init.d 目录下的程序,因此可将需要自动运行的脚本放置于该目录下。系统服务的启动即通过此方式实现。添加完成后,务必设置文件的可执行权限,命令如下:

chmod +x filename

三、制作 Linux 服务并设置开机自启动

1. 简介

本文以 Nginx 为例,通过制作 Linux 服务的方式启动,并设置开机启动。

2. 前提条件

Nginx 已安装,其默认安装路径为 /usr/local/nginx

3. 方法步骤

  1. 制作服务:在 /etc/systemd/system/ 路径下创建 nginx.service 文件。

    cd /etc/systemd/system/
    vi nginx.service
    

    写入以下内容:

    [Unit]
    Description=nginx - high performance web server
    After=nginx.service[Service]
    Type=forking
    ExecStart=/usr/local/nginx/sbin/nginx
    ExecReload=/usr/local/nginx/sbin/nginx -s reload
    ExecStop=/usr/local/nginx/sbin/nginx -s stop
    Execenable=/usr/local/nginx/sbin/nginx[Install]
    WantedBy=multi-user.target
    

    保存并退出。

  2. 设置开机自启动

    # 设置开机启动
    systemctl enable nginx
    # 取消开机自启动
    #systemctl disable nginx
    # 查看服务当前状态
    systemctl status nginx
    # 启动 Nginx 服务
    systemctl start nginx
    # 停止 Nginx 服务
    systemctl stop nginx
    # 重启 Nginx 服务
    systemctl restart nginx
    

Linux 设置开机自启动的几种方式

ssooking
2023-05-25

一、在 /etc/rc.local 文件中添加自启动命令

执行命令:编辑 /etc/rc.local 文件,添加开机运行的命令。

运行程序脚本:在文件的最后一行添加要执行程序的全路径。例如,若每次开机时要执行位于 /usr 下的 hello.sh 脚本,可在 /etc/rc.local 中添加一行 /usr/./hello.shcd /opt && ./hello.sh。注意以下事项:

  1. 命令应添加在 exit 0 之前。
  2. 输入绝对路径。
  3. rc.local 添加执行权限。

img

二、在 /etc/init.d 目录下添加自启动脚本

Linux 系统在 /etc/rc.d/init.d 目录下有许多文件,这些文件均为可查看内容的 Shell 脚本或可执行二进制文件。Linux 开机时会加载并运行 /etc/init.d 目录下的程序,因此可将需要自动运行的脚本放置于该目录下。系统服务的启动即通过此方式实现。

三、运行级别设置

简而言之,运行级别是指操作系统当前正在运行的功能级别。不同的运行级别定义如下:

# 0 - 停机(千万不能把 initdefault 设置为 0)
# 1 - 单用户模式         进入方法 #init s = init 1
# 2 - 多用户,没有 NFS
# 3 - 完全多用户模式(标准的运行级)
# 4 - 没有用到
# 5 - X11 多用户图形模式(xwindow)
# 6 - 重新启动(千万不要把 initdefault 设置为 6)

例如,在 Ubuntu/Debian 系统中,可使用 update-rc.d 命令将示例脚本 /etc/init.d/proxy 安装到各个运行级别中。

update-rc.d proxy defaults 99

update-rc.d 后面有三个参数,分别是 /etc/init.d 下的脚本名称、默认安装方式以及运行的优先级。优先级的数字越大,表示越迟运行,此处将自定义服务放在最后运行。

若要卸载随机启动的服务,可执行以下命令:

update-rc.d -f proxy remove

在使用 update-rc.d 安装时,若出现警告信息,是因为 /etc/init.d/proxy 脚本过于简陋,未提供 LSB 信息。只需对自启动脚本进行如下小改动,即可避免该警告:

#!/bin/sh
### BEGIN INIT INFO
# Provides: proxy
# Required-Start: $remote_fs
# Required-Stop: $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start or stop the HTTP Proxy.
### END INIT INFOcase "$1" in
start)
start-stop-daemon --start --background --exec /root/proxy.py
;;
stop)
start-stop-daemon --stop --name proxy.py
;;
esac

至此,一个最简单的随机启动服务已创建完成。尽管文章篇幅较长,但实际上仅涉及几个命令。下次开机时,proxy.py 将以 root 用户身份自动运行。

四、把脚本注册为系统服务

/etc/init.d 下新建示例脚本文件(startTest.sh),该脚本会启动 /opt/test.sh。脚本内容如下:

. /etc/init.d/functions
start() {
echo "Starting my process"
cd /opt
./test.sh
}
stop() {
killall test.sh
echo "Stopped"
}

完成脚本文件编写后,还需执行以下步骤:

chmod +x startTest        # 增加执行权限
chkconfig --add startTest     # 把 startTest 添加到系统服务列表
chkconfig startTest on       # 设定 startTest 的开关(on/off)
chkconfig --list startTest.sh   # 查看已注册的 startTest 服务

linux 设置开机自动启动应用,可屏蔽桌面

大大棋 于 2022-02-25 22:01:54 发布

本篇适合有需求将某些应用或者服务甚至是 QT 应用设置成开机启动的玩家,提供三种添加开机自启方式!

一、往/etc/rc.local中添加执行脚本

第一种是最简单也是最基本的方式,将需要开机自启的UI或者应用添加写成脚本的形式,放置在固定的位置;然后将该脚本的绝对路径添加到/etc/rc.local中。

在这里插入图片描述

这种方式可能比较简易,但是存在一个弊端,如果你需要开机启动一个QT的界面应用的话,这种方式会在启动之后会先显示一下桌面,然后在进入UI界面

但是可以通过ctrl+alt+F7切换回桌面,满足任意时刻切换到桌面进行调试的要求;同时可以通过ctrl+alt+F1~6切换回ui界面,一般是F1即可

二、往systemd中添加开机自启服务

Systemd 是 Linux 系统工具,用来启动守护进程,已成为大多数发行版的标准配置。在老版本的Linux上移植使用init进程来启动服务,而init进行的启动方式是串行启动,只有前一个进程启动完成后才会进行下一个进程的启动,所以较systemd低,所以systemd诞生后就取代了init.

在这里插入图片描述
Systemd 并不是一个命令,而是一组命令,涉及到系统管理的方方面面。

2.1 创建服务文件,编写systemd启动unit

每一个Unit都有一个配置文件,告诉Systemd怎么启动这个 Unit。Systemd默认从目录/etc/systemd/system/读取配置文件;

读懂配置文件

一个服务需要怎么启动,完全由它的配置文件决定的,systemd的服务文件后缀为.service,保存的文件路径在/etc/systemd/system下(一共有三个地方存放服务文件==具体使用方式,可以看我的另一篇博文systemd服务分析==);
在这里插入图片描述随便打开一个服务文件,比如sshd.service文件为例,其用于启动SSH服务,具体如下:

[Unit]
Description=OpenBSD Secure Shell server
After=network.target auditd.service
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run[Service]
EnvironmentFile=-/etc/default/ssh
ExecStartPre=/usr/sbin/sshd -t
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
ExecReload=/usr/sbin/sshd -t
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartPreventExitStatus=255
Type=notify[Install]
WantedBy=multi-user.target
Alias=sshd.service

不难看出上面代码块一共包含三个区块,每个驱动下都有不同的key-value;

2.1.1 [Unit]:启动顺序和依赖关系
  • Unit区块的Description字段给出当前服务的简单描述,Documentation字段给出文档位置;
  • After字段:表示如果network.targetsshd-keygen.service需要启动,那么sshd.service应该在它们之后启动;
  • Before字段,定义sshd.service应该在哪些服务之前启动;
  • After和Before字段只涉及启动顺序,不涉及依赖关系;
  • Wants字段:表示sshd.servicesshd-keygen.service之间存在"弱依赖"关系,即如果"sshd-keygen.service"启动失败或停止运行,不影响sshd.service继续执行;
  • Requires字段则表示"强依赖"关系,即如果该服务启动失败或异常退出,那么sshd.service也必须退出;
  • Wants字段与Requires字段只涉及依赖关系,与启动顺序无关,默认情况下是同时启动的。
2.1.2 [Service]:启动行为,定义如何启动当前服务
  • EnvironmentFile字段:指定当前服务的环境参数文件。该文件内部的key=value键值对,可以用$key的形式,在当前配置文件中获取;

  • ExecStart字段:定义启动进程时执行的命;

  • ExecReload字段:重启服务时执行的命令;

  • ExecStop字段:停止服务时执行的命令;

  • ExecStartPre字段:启动服务之前执行的命令;

  • ExecStartPost字段:启动服务之后执行的命令;

  • ExecStopPost字段:停止服务之后执行的命令;

    • Type 字段定义启动类型。它可以设置的值如下;
  • simple(默认值):ExecStart字段启动的进程为主进程;

    • forking:ExecStart字段将以fork()方式启动,此时父进程将会退出,子进程将成为主进程;
    • oneshot:类似于simple,但只执行一次,Systemd 会等它执行完,才启动其他服务;
    • dbus:类似于simple,但会等待 D-Bus 信号后启动;
    • notify:类似于simple,启动结束后会发出通知信号,然后 Systemd 再启动其他服务;
    • idle:类似于simple,但是要等到其他任务都执行完,才会启动该服务。一种使用场合是为让该服务的输出,不与其他服务的输出相混合;
  • KillMode 字段:定义Systemd如何停止sshd服务;

    • control-group(默认值):当前控制组里面的所有子进程,都会被杀掉;

    • process:只杀主进程;

    • mixed:主进程将收到SIGTERM信号,子进程收到SIGKILL信号;

    • none:没有进程会被杀掉,只是执行服务的stop命令;

  • Restart 字段:定义了sshd退出后,Systemd的重启方式;

    • no(默认值):退出后不会重启;
    • on-success:只有正常退出时(退出状态码为0),才会重启;
    • on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启;
    • on-abnormal:只有被信号终止和超时,才会重启;
    • on-abort:只有在收到没有捕捉到的信号终止时,才会重启;
    • on-watchdog:超时退出,才会重启;
    • always:不管是什么退出原因,总是重启;
  • RestartSec字段:表示 Systemd 重启服务之前,需要等待的秒数。上面的例子设为等待42秒;

2.1.3 [Install]:定义如何安装这个配置文件,即怎样做到开机启动
  • WantedBy字段:表示该服务所在的 Target;Target的含义是服务组,表示一组服务。WantedBy=multi-user.target指的是,sshd 所在的 Target 是multi-user.target

这个设置非常重要,因为执行systemctl enable sshd.service命令时,sshd.service的一个符号链接,就会放在/etc/systemd/system目录下面的multi-user.target.wants子目录之中。

systemd 的 target

Systemd 目标注释
runlevel0.target, poweroff.target中断系统(halt)
runlevel1.target, rescue.target单用户模式
runlevel2.target, runlevel4.target, multi-user.target用户自定义启动级别,通常识别为级别3。
runlevel3.target, multi-user.target多用户,无图形界面。用户可以通过终端或网络登录。
runlevel5.target, graphical.target多用户,图形界面。继承级别3的服务,并启动图形界面服务。
runlevel6.target, reboot.target重启
emergency.target急救模式(Emergency shell)

Systemd默认的启动Target为multi-user.target,我们也可以通过指令去查看当前启动的target

$systemctl get-default
multi-user.target

结果表示当前的target下所有的服务都将在开机时启动;

一般来说,常用的 Target 有两个:一个是multi-user.target,表示多用户命令行状态;另一个是graphical.target,表示图形用户状态,它依赖于multi-user.target

2.2 创建服务文件

通过前面的分析,应该可以很清楚systemd启动服务的配置文件的编写规则,我们可以直接复制或者编写一套自己的服务文件;
比如说你新建一个服务文件名为:myui.service
编辑单元如下:

[Unit]
Description=my ui service[Service]
Type=simple
ExecStart=你的应用或者脚本存放的路径,用于启动的
ExecReload=你的应用或者脚本存放的路径,用于重启的(非必要)
ExecStop=你的应用或者脚本存放的路径,用于停止的(非必要)
Restart=on-failure
RestartSec=42s
KillMode=process[Install]
WantedBy=multi-user.target

2.3 添加到自启服务

完成前面的配置后,需要将该服务添加到自启服务中去,才可以实现开机自启。

sudo systemctl daemon-reload

设置开机自启

sudo systemctl enable gree

设置自启动,实质上就是在/etc/systemd/system/multi-user.target.wants/下添加服务文件的链接。

重启相关服务

sudo systemctl start gree.service

查看服务状态

sudo systemctl status gree.service

三、使用显示管理器启动

ubuntu使用的是显示管理器一般为:LightDM - 跨桌面显示管理器,可以使用任何工具包中编写的各种前端,当前开发机使用的Ubuntu16.04默认使用该管理器。

显示管理器也称登陆管理器,向用户显示登录屏幕,它们提供图形化登录并处理用户身份验证,当用户成功输入用户名和密码的有效组合时,会话开始。

大多数登录管理器会从/usr/share/xsessions/读取可用的.desktop文件,在安装各种窗口管理器时会在/usr/share/xsessions/下生成对应的desktop文件,比如ubuntu自带的ubuntu.desktop文件就在该文件下面,仿造它原来的启动文件配置自己的配置文件再进行启动更改即可;

3.1 .desktop配置

原ubuntu.desktop配置如下:

[Desktop Entry]
Name=Ubuntu
Comment=This session logs you into Ubuntu
Exec=gnome-session --session=ubuntu
TryExec=unity
Icon=
Type=Application
DesktopNames=Unity
X-Ubuntu-Gettext-Domain=gnome-session-3.0
123456789

.desktop涉及的语法规则如下:

Key描述Value 类型是否必须?
TypeApplication (type1), Link (type2), Direcory (type3)stringYes
Version版本,例如 1.1stringNo
Name应用程序的特定名称,例如 “Mozilla”。localestringYes
GenericName应用程序的通用名称,例如 “Web 浏览器”。localestringNo
NoDisplay不在菜单中显示,但可以与 MIME 类型相关联booleanNo
Comment应用描述ocalestringNo
Icon要么绝对路径,要么符合 图标主题 规范.localestringNo
Hidden是否隐藏,等同于不存在的文件booleanNo
OnlyShowIn, NotShowIn一般不用此字段booleanNo
DBusActivatableDBus 激活,默认 false。参阅 D-Bus 激活.。应包含 Exec 行,实现兼容booleanNo
TryExec如果文件不存在,则忽略该文件,并不在菜单中出现stringNo
Exec执行路径 。参阅 Exec Key .stringNo
Path当 Type=Application 时,程序运行的目录string No1
Terminal程序是否在终端窗口中运行。booleanNo
Actions为其他组提供接口,比如 Action=Gallery;,那么其他组就为 [Desktop Action Gallery]string (s)No
MimeType此应用支持打开的类型,具体类型可以百度string (s)No
Categories参阅 桌面菜单规范 .string (s)No
Implements默认情况下,桌面文件不实现任何接口。参阅 接口 .string (s)No
Keywords用于搜索,不应该是 Name 或者为多余的值 GenericName。localestring (s)No
StartupNotify如果不存在,则合理的处理取决于实现(假设为 false,使用 StartupWMClass 等)。参阅 启动通知协议规范.booleanNo
StartupWMClass一般跟 Name 相同即可stringNo
URL只适用于 Type=LinkstringYes

直接复制原 ubuntu 的桌面启动文件,更名为你指定的文件

sudo cp /usr/share/xsessions/ubuntu.desktop yourfile.desktop

删除不必要的key避免造成不必要的麻烦,如下:

[Desktop Entry]
Name=yourapp
Comment=This session xxxxxxx
Exec=/你的待执行的应用路径
Icon=
Type=Application
  • 第4行,可执行文件的绝对路径,该KEY是必选的;

3.2 添加到启动项

完成到3.1 .desktop配置已经可以满足手动去启动程序了,就类似一个图标,接下来需要设置为登陆管理器自动启动;

3、使用显示管理器启动提到ubuntu使用的是lightdm作为登陆管理器,所以我们需要设置该管理器进行自动启动,编辑lightdm的配置文件/etc/lightdm/lightdm.conf,如下:

[Seat:*]
autologin-guest=false
autologin-user=gree
autologin-user-timeout=0
#autologin-session=app
#autologin-session=xterm
#autologin-session=openbox
#autologin-session=ubuntu
autologin-session=yourfile // 这里的yourfile和yourfile.desktop相关

和shell脚本一样,使用#号进行注释,注释第8行,添加第9行;需要注意的有如下几点:

  • autologin-user字段必须是该autologin 群组的一员才能在不输入密码的情况下自动登录;本文的gree属于autologin 群组;
  • autologin-session字段更改为3.1 .desktop配置中的yourfile.desktop,保留yourfile填入即可。

Linux设置软件开机自启动的三种方式(中标麒麟、银河麒麟、ubuntu)

从此开始低调范✌️已于 2023-05-17 10:54:54 修改

一、有界面的程序自启动

利用Linux的 .desktop文件实现开机启动。

/etc/xdg/autostart 目录下建立一个 test.desktop文件,并对文件进行以下编辑。

操作步骤

  1. 打开/etc/xdg/autostart目录

    cd /etc/xdg/autostart
    
  2. 建立test.desktop文件

    touch test.desktop
    
  3. 编写文件并保存

    sudo vim test.desktop
    

添加如下代码:

[Desktop Entry]
Name=Test	 		#可执行文件名字
Exec=/root/Test 	#可执行文件路径
Type=Application	#可执行文件类型

桌面条目具体要求和含义可见:

https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html

注意

  1. 需要root权限
  2. 此设置开机自启动的方法与rc.local方法不同的是,此方法适合桌面级软件的开机自启动(软件有界面)

二、无界面的程序自启动

① 方式一

Ubuntu 20.04的服务管理是基于systemd的,因此设置服务自启动最推荐的方法是在/etc/systemd/user目录下创建一个systemd服务文件,配置好要执行的服务。

该种方式在ExecStart字段中指定开机自启动的程序是可执行文件的时候会管用,但在某些情况下,当ExecStart字段指定为脚本文件时可能会失效,并且此方式貌似需要登录系统后才会启动指定的程序

操作步骤
  1. 创建我们需要开机自启动的脚本,例如test.sh,其内容如下:

    #!/bin/bashcd ~/
    touch 11111111111.txt
    
  2. 在/etc/systemd/user目录下创建一个systemd服务文件, 命名为user-defined.service(可以命名为以.service结尾的任何名称), 内容如下:

    [Unit]
    After=network.service
    # After表示在哪个服务启动后启动我们的程序,After=network.service 表示网络连接完成后,启动我们的程序[Service]
    ExecStart=/home/hqc/test.sh # 此处只能绝对路径
    # ExecStart表示我们的脚本(步骤1中的test.sh)的执行路径[Install]
    WantedBy=default.target
    # WantedBy默认填default.target,表示我们程序所在的服务组。
    
  3. 将systemd服务文件和我们的脚本更改权限,使其可执行。

    sudo chmod 744 ~/test.sh
    sudo chmod 664 /etc/systemd/user/user-defined.service
    
  4. 重新加载系统的systemd服务文件,并启用我们自己写的user-defined.service文件。

    sudo systemctl daemon-reload
    systemctl --user enable user-defined.service
    
取消开机自启动
systemctl --user disable user-defined.service
cd /etc/systemd/user
rm user-defined.service

② 方式二

现在大部分的Linux发布版本开机第一个程序都从init换成了systemd这中启动方式。systemd是靠管理unit的方式来控制开机服务、开机级别等功能。

/usr/lib/systemd/system目录下包含了各种unit文件,有service后缀的服务unit,有target后缀的开机级别unit等,这里介绍关于service后缀的文件。因为systemd在开机要想执行自启动,都是通过这些*.serviceunit控制的,服务又分为系统服务(system)和用户服务(user)。

  • 系统服务:开机不登录就能运行的程序(常用于开机自启)。
  • 用户服务:需要登录以后才能运行的程序。
配置文件说明

(以sshd.service服务为例)

  • [Unit]区块:启动顺序与依赖关系
    Description字段:给出当前服务的简单描述。
    Documentation字段:给出文档位置。
    After字段:如果network.targetsshd-keygen.service需要启动,那么sshd.service应该在它们之后启动。
    Before字段:定义sshd.service应该在哪些服务之前启动。
    注:[AfterBefore字段只涉及启动顺序,不涉及依赖关系]
    Wants字段:表示sshd.servicesshd-keygen.service之间存在“弱依赖”关系,即如果sshd-keygen.service启动失败或停止运行,不影响sshd.service继续执行。
    Requires字段:表示“强依赖”关系,即如果该服务启动失败或异常提出,那么sshd.service也必须退出。
    注:[Wants字段与Requires字段只涉及依赖关系,与启动顺序无关,默认情况下是同时启动的]

  • [Service]区块:启动行为。

    • 启动命令
      ExecStart字段:定义启动进程时执行的命令。
      ExecReload字段:重启服务时执行的命令。
      ExecStop字段:停止服务时执行的命令。
      ExecStartPre字段:启动服务之前执行的命令。
      ExecStartPost字段:启动服务之后执行的命令。
      ExecStopPost字段:停止服务之后执行的命令。
      注:所有的启动设置之前都可以加一个连词号(-),表示“抑制错误”,即发生错误的时候,不影响其他命令的执行。比如EnvironmentFile=-/etc/sysconfig/sshd(注意等号后面的那个连词号),就表示即使/etc/sysconfig/sshd文件不存在,也不会抛出错误。[Service]中的启动、重启、停止命令要求全部使用绝对路径!

    • 启动类型
      Type字段定义启动类型。
      它可以设置的值如下:

      • simple(默认值):ExecStart字段启动的进程为主进程
      • forkingExecStart字段将以fork()方式启动,此时父进程将会退出,子进程将成为主进程(后台运行)
      • oneshot:类似于simple,但只执行一次,Systemd 会等它执行完,才启动其他服务
      • dbus:类似于simple,但会等待D-Bus信号后启动
      • notify:类似于simple,启动结束后会发出通知信号,然后 Systemd 再启动其他服务
      • idle:类似于simple,但是要等到其他任务都执行完,才会启动该服务。一种使用场合是为让该服务的输出,不与其他服务的输出相混合。
    • 重启行为
      Service区块有一些字段,定义了重启行为。

      • KillMode字段:定义 Systemd 如何停止 sshd 服务:

        • control-group(默认值):当前控制组里面的所有子进程,都会被杀掉
        • process:只杀主进程
        • mixed:主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号
        • none:没有进程会被杀掉,只是执行服务的 stop 命令。
      • Restart字段:定义了sshd退出后,Systemd 的重启方式

        • no(默认值):退出后不会重启
        • on-success:只有正常退出时(退出状态码为0),才会重启
        • on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启
        • on-abnormal:只有被信号终止和超时,才会重启
        • on-abort:只有在收到没有捕捉到的信号终止时,才会重启
        • on-watchdog:超时退出,才会重启
        • always:不管是什么退出原因,总是重启

        Restart设为on-failure,表示任何意外的失败,就将重启sshd。如果 sshd 正常停止(比如执行systemctl stop命令),它就不会重启。

        注:[对于守护进程,推荐设为on-failure。对于那些允许发生错误退出的服务,可以设为on-abnormal]

      • RestartSec字段:表示 Systemd 重启服务之前,需要等待的秒数。

  • [Install]区块
    Install区块定义如何安装这个配置文件,即怎样做到开机启动。

    • WantedBy字段:表示该服务所在的 Target

    • Target的含义是服务组,表示一组服务。

    • WantedBy=multi-user.target指的是:sshd 所在的 Target multi-user.target
      这个设置非常重要,因为执行systemctl enable sshd.service命令时,sshd.service的一个符号链接,就会放在/etc/systemd/system目录下面的multi-user.target.wants子目录之中。
      Systemd 有默认的启动 Target

      systemctl get-default
      #输出multi-user.target
      12
      

      上面的结果表示,默认的启动 Targetmulti-user.target。在这个组里的所有服务,都将开机启动。这就是为什么systemctl enable命令能设置开机启动的原因。
      使用 Target 的时候,systemctl list-dependencies命令和systemctl isolate命令也很有用。

      #查看 multi-user.target 包含的所有服务
      systemctl list-dependencies multi-user.target#切换到另一个 target
      #shutdown.target 就是关机状态
      systemctl isolate shutdown.target
      123456
      

      一般来说,常用的Target有两个:
      multi-user.target:表示多用户命令行状态;
      graphical.target:表示图形用户状态,它依赖于multi-user.target

注册服务实例
  • 配置文件目录
    systemctl脚本目录:/usr/lib/systemd/
    系统服务目录:/usr/lib/systemd/system/
    用户服务目录:/usr/lib/systemd/user/

  • /usr/lib/systemd/system目录下新建service-name.service文件:

    [Unit]
    #服务描述
    #Description=Media wanager Service
    #指定了在systemd在执行完那些target之后再启动该服务
    After=network.target[Service]
    #定义Service的运行类型,这种一般是开机自启动文件就是可执行文件
    Type=simple#Type=forking,这种一般是开机自启动文件为shell脚本文件,脚本文件里面可能写了多个需要
    #开机自启动的程序,forking代表子进程的方式,就是脚本里的程序以子进程后台运行。
    #WorkingDirectory=工作目录 #该项设置自启动软件的工作目录。
    #定义systemctl start|stop|reload *.service 的执行方法(具体命令需要写绝对路径)
    #注:ExecStartPre为启动前执行的命令
    ExecStartPre=/usr/bin/test "x${NETWORKMANAGER}" = xyes
    ExecStart=/home/mobileoa/apps/shMediaManager.sh -start#-start加不加都行
    #创建私有的内存临时空间
    PrivateTmp=True[Install]
    #多用户
    WantedBy=multi-user.target
    

重载系统服务:systemctl daemon-reload

设置开机启动:systemctl enable *.service

启动服务:systemctl start *.service

停止服务:systemctl stop *.service

重启服务:systemctl restart *.service

注:[修改完配置文件要重载配置文件]

三、补充

适用于无界面的程序自启动

对于有/etc/rc.d/rc.local/etc/rc.local文件的Linux发行版本,开机自启动只需要在/etc/rc.local文件中添加上自己程序的路径即可,但如果程序是有界面的,仍然只能使用方法一来设置开机自启动。

注:现在已经不提倡使用这种方式设置开机自启动了,如果使用过程中设置失败了,需要查看/etc/rc.d/rc.local文件是否具有可执行权限(/etc/rc.local只是/etc/rc.d/rc.local的软链接,添加/etc/rc.local文件的可执行权限是不管用的)。


via:

  • 【linux】linux 设置开机自启动的几种方式 - 还好我带了急啊离开的 - 博客园
    https://www.cnblogs.com/uuuuuuuuuuuuuuuu/p/17431156.html

  • Linux 设置开机自启动的三种方法 - 幽夜卡尔 - 博客园
    https://www.cnblogs.com/Alwayslearn/p/16816093.html

  • linux 设置开机自动启动应用,可屏蔽桌面_linux 设置开机不进图形界面直接启动程序教程 - CSDN 博客 大大棋!于 2022-02-25 22:01:54 发布
    https://blog.csdn.net/qq_41714908/article/details/123141656

  • Linux 设置软件开机自启动的三种方式(中标麒麟、银河麒麟、ubuntu)_linux 程序自启动 - CSDN 博客 从此开始低调范 已于 2023-05-17 10:54:54 修改
    https://blog.csdn.net/qq_45164331/article/details/122410141

    • systemd.service
      https://www.freedesktop.org/software/systemd/man/systemd.service.html
    • CentOS7使用systemctl添加自定义服务 - 简书
      https://www.jianshu.com/p/79059b06a121
    • systemd/User - ArchWiki
      https://wiki.archlinux.org/title/systemd/User
    • systemd.service 中文手册 [金步国]
      http://www.jinbuguo.com/systemd/systemd.service.html
  • 14 | linux 设置开机自启动的三种方法_linux 开机自启动命令 - CSDN 博客
    https://blog.csdn.net/u013916029/article/details/127511763

  • Linux 设置开机启动项的几种方法_noilinux 启动项设置 - CSDN 博客
    https://blog.csdn.net/autoliuweijie/article/details/73279136

  • linux 设置开机自启动的三种方法_linux 设置开机启动 - CSDN 博客_
    https://blog.csdn.net/u012627049/article/details/142515255

相关文章:

  • 深入解析 OpenManus:开源 AI 智能体框架的技术原理与实践
  • 智能事件分析边缘服务器:交通管理与安全监测的利器
  • IEEE PRMVAI 2025新论坛: 人工智能+雷达信号处理
  • python学习打卡day31
  • PostgreSQL简单使用
  • 大语言模型 15 - Manus 超强智能体 开源版本 OpenManus 案例与原理深入解析
  • 【氮化镓】低剂量率对GaN HEMT栅极漏电的影响
  • 用于管理共享内存的 C# 类 ShareMemory
  • 9-社区动态(Stack布局)
  • 探秘鸿蒙 HarmonyOS NEXT:Navigation 组件的全面解析
  • HarmonyOS5云服务技术分享--账号登录文章整理
  • cv2.VideoWriter_fourcc(*‘mp4v‘)生成的视频无法在浏览器展
  • 基于 STM32 的蔬菜智能育苗系统硬件与软件设计
  • Go语言使用通义灵码辅助开发 - AI编程助手提升效率
  • 经典Java面试题的答案——Java 基础
  • Kotlin 协程 (一)
  • 【Linux】初见,基础指令(续)
  • 获取文件夹下所有文件的名称
  • Datawhale PyPOTS时间序列5月第4次笔记
  • Docker run -v 的 rw 和 ro 模式_docker ro
  • 6月底将返回中国,旅日大熊猫获颁“感谢状”
  • 凤阳文旅局长回应鼓楼瓦片脱落事件:楼宇是否属于文物?施工经费用在何处?
  • 春决火爆的背后,PEL如何做大这块电竞蛋糕
  • 黄仁勋:美国芯片管制完全错误,阻碍别人发展只会激励他们更努力
  • 再囤三个月库存!美国客户抢付尾款,外贸企业发货订单排到7月
  • 花旗回应减员传闻:持续评估人力资源战略,将为受影响的个人提供支持