注:本文为“Llinux 设置开机自启”相关文章合辑。
略作重排,未整理去重。
如有内容异常,请看原文。
Linux 设置开机自启动的三种方法
幽夜卡尔
2022-10-22
一、在 /etc/rc.local
文件中添加自启动命令
编辑文件:执行以下命令,编辑
/etc/rc.local
文件。vi /etc/rc.local
添加命令:在文件的最后一行添加要执行程序的全路径。例如,若每次开机时要执行位于
/usr
下的hello.sh
脚本,可在/etc/rc.local
中添加一行/usr/./hello.sh
或cd /usr/ && ./hello.sh
。注意,命令应添加在exit 0
之前。设置权限:保存文件后,设置
/etc/rc.local
的可执行权限。chmod +x /etc/rc.local
二、在 /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. 方法步骤
制作服务:在
/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
保存并退出。
设置开机自启动:
# 设置开机启动 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.sh
或 cd /opt && ./hello.sh
。注意以下事项:
- 命令应添加在
exit 0
之前。 - 输入绝对路径。
- 给
rc.local
添加执行权限。
二、在 /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 INFO
case "$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.target
或sshd-keygen.service
需要启动,那么sshd.service
应该在它们之后启动;Before
字段,定义sshd.service
应该在哪些服务之前启动;- After和Before字段只涉及启动顺序,不涉及依赖关系;
Wants
字段:表示sshd.service
与sshd-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
,但是要等到其他任务都执行完,才会启动该服务。一种使用场合是为让该服务的输出,不与其他服务的输出相混合;
- forking:
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 类型 | 是否必须? |
---|---|---|---|
Type | Application (type1), Link (type2), Direcory (type3) | string | Yes |
Version | 版本,例如 1.1 | string | No |
Name | 应用程序的特定名称,例如 “Mozilla”。 | localestring | Yes |
GenericName | 应用程序的通用名称,例如 “Web 浏览器”。 | localestring | No |
NoDisplay | 不在菜单中显示,但可以与 MIME 类型相关联 | boolean | No |
Comment | 应用描述 | ocalestring | No |
Icon | 要么绝对路径,要么符合 图标主题 规范. | localestring | No |
Hidden | 是否隐藏,等同于不存在的文件 | boolean | No |
OnlyShowIn, NotShowIn | 一般不用此字段 | boolean | No |
DBusActivatable | DBus 激活,默认 false。参阅 D-Bus 激活.。应包含 Exec 行,实现兼容 | boolean | No |
TryExec | 如果文件不存在,则忽略该文件,并不在菜单中出现 | string | No |
Exec | 执行路径 。参阅 Exec Key . | string | No |
Path | 当 Type=Application 时,程序运行的目录 | string No | 1 |
Terminal | 程序是否在终端窗口中运行。 | boolean | No |
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 等)。参阅 启动通知协议规范. | boolean | No |
StartupWMClass | 一般跟 Name 相同即可 | string | No |
URL | 只适用于 Type=Link | string | Yes |
直接复制原 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
文件,并对文件进行以下编辑。
操作步骤
打开
/etc/xdg/autostart
目录cd /etc/xdg/autostart
建立
test.desktop
文件touch test.desktop
编写文件并保存
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
注意:
- 需要
root
权限 - 此设置开机自启动的方法与
rc.local
方法不同的是,此方法适合桌面级软件的开机自启动(软件有界面)
二、无界面的程序自启动
① 方式一
Ubuntu 20.04的服务管理是基于systemd的,因此设置服务自启动最推荐的方法是在/etc/systemd/user
目录下创建一个systemd服务文件,配置好要执行的服务。
该种方式在
ExecStart
字段中指定开机自启动的程序是可执行文件的时候会管用,但在某些情况下,当ExecStart
字段指定为脚本文件时可能会失效,并且此方式貌似需要登录系统后才会启动指定的程序
操作步骤
创建我们需要开机自启动的脚本,例如test.sh,其内容如下:
#!/bin/bash cd ~/ touch 11111111111.txt
在/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,表示我们程序所在的服务组。
将systemd服务文件和我们的脚本更改权限,使其可执行。
sudo chmod 744 ~/test.sh sudo chmod 664 /etc/systemd/user/user-defined.service
重新加载系统的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
在开机要想执行自启动,都是通过这些*.service
的unit
控制的,服务又分为系统服务(system)和用户服务(user)。
- 系统服务:开机不登录就能运行的程序(常用于开机自启)。
- 用户服务:需要登录以后才能运行的程序。
配置文件说明
(以sshd.service
服务为例)
[Unit]
区块:启动顺序与依赖关系
Description
字段:给出当前服务的简单描述。
Documentation
字段:给出文档位置。
After
字段:如果network.target
或sshd-keygen.service
需要启动,那么sshd.service
应该在它们之后启动。
Before
字段:定义sshd.service
应该在哪些服务之前启动。
注:[After
和Before
字段只涉及启动顺序,不涉及依赖关系]
Wants
字段:表示sshd.service
与sshd-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
字段启动的进程为主进程forking
:ExecStart
字段将以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
上面的结果表示,默认的启动
Target
是multi-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.htmlLinux 设置开机自启动的三种方法 - 幽夜卡尔 - 博客园
https://www.cnblogs.com/Alwayslearn/p/16816093.htmllinux 设置开机自动启动应用,可屏蔽桌面_linux 设置开机不进图形界面直接启动程序教程 - CSDN 博客 大大棋!于 2022-02-25 22:01:54 发布
https://blog.csdn.net/qq_41714908/article/details/123141656Linux 设置软件开机自启动的三种方式(中标麒麟、银河麒麟、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
- systemd.service
14 | linux 设置开机自启动的三种方法_linux 开机自启动命令 - CSDN 博客
https://blog.csdn.net/u013916029/article/details/127511763Linux 设置开机启动项的几种方法_noilinux 启动项设置 - CSDN 博客
https://blog.csdn.net/autoliuweijie/article/details/73279136linux 设置开机自启动的三种方法_linux 设置开机启动 - CSDN 博客_
https://blog.csdn.net/u012627049/article/details/142515255