Linux 程序脚本开机启动自启动等

前言

Linux下,可能需要在某些场景下自动去执行一些命令,比如开机启动。本次分享包含,开机启动脚本,程序,以及相关配置命令。开机启动方法也很多,但针对的条件也不同。

desktop开机自启

通过编写desktop文件,将文件放到/etc/xdg/autostart/目录下,则可开机启动相应程序。其中”Exec=/usr/bin/showTime“,/usr/bin/showTime就是你要执行的程序,这里可以是界面程序,也可以是脚本。

将该desktop文件,添加可执行权限后放到桌面,也可直接执行。

desktop文件例子:

kch@kch:~/showTime/show-timer-1.0.0$ cat showTime.desktop 
[Desktop Entry]
Name=showTimer
Icon=/usr/share/time-weather.png
Exec=/usr/bin/showTime
Terminal=false
Type=Application
NoDisplay=false              
kch@kch:~/showTime/show-timer-1.0.0$ 

desktop文件参数介绍

在这里插入图片描述

service服务开机自启

通过编写service服务的方式启动,但只能启动非界面程序。将service文件放到/lib/systemd/system/目录下,然后执行systemctl enable xxx.service ,/lib/systemd/system/目录下的xxx.service 符号链接会放在 /etc/system/sytemd 下,然后会开机启动该服务。

service参数介绍

[Unit] 是启动顺序和依赖关系,如果有Wants或Requires字段代表依赖关系

[Service] 是启动的行为

[install] 是如何安装这个配置文件

[Unit]
Description=xxxx
After=network.target remote-fs.target nss-lookup.target    #启动顺序 在这些程序之后启动
Wants=network.target         #弱依赖,启动失败或停止运行,不影响xxxx本服务继续执行
#Requires=nss-lookup.target   强依赖,即如果nss-lookup.target服务启动失败或异常退出,那么本服务也必须退出。

[Service]
Type=notify
ExecStart=/usr/bin/xxx       #启动进程时执行的命令
RemainAfterExit=yes          #表示进程退出以后,服务仍然保持执

[Install]
WantedBy=multi-user.target   #表示服务所在的Target(服务组)

当然还有其他配置参数

[Service] 区块 EnvironmentFile字段

指定当前服务的环境参数文件。该文件内部的key=value键值对,可以用$key的形式,在当前配置文件中获取。

[Service] 区块 ExecStart字段

定义启动进程时执行的命令,也是配置文件里面最重要的字段。

  • ExecReload字段:重启服务时执行的命令
  • ExecStop字段:停止服务时执行的命令
  • ExecStartPre字段:启动服务之前执行的命令
  • ExecStartPost字段:启动服务之后执行的命令
  • ExecStopPost字段:停止服务之后执行的命令

[Service] 区块 Type字段 启动类型

可选值:

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

[Service] 区块 KillMode字段 重启行为

可选值:

  • control-group(默认值):当前控制组里面的所有子进程,都会被杀掉
  • process:只杀主进程
  • mixed:主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号
  • none:没有进程会被杀掉,只是执行服务的 stop 命令。

[Service] 区块 Restart字段

定义了该服务退出后,Systemd 的重启方式

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

[Service] 区块 RestartSec字段

表示 Systemd 重启服务之前,需要等待的秒数。

[Install] 区块

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

[Install] 区块 WantedBy字段

表示该服务所在的 Target,Target的含义是服务组,表示一组服务。WantedBy=multi-user.target指的是,默认的启动 Target 是multi-user.target。

这个设置非常重要,因为执行systemctl enable xxx.service命令时,xxx.service的一个符号链接,就会放在/etc/systemd/system目录下面的multi-user.target.wants子目录之中,在这个组里的所有服务,都将开机启动。

systemctl常用命令

 列出正在运行的 Unit
$ systemctl list-units

# 列出所有Unit,包括没有找到配置文件的或者启动失败的
$ systemctl list-units --all

# 列出所有没有运行的 Unit
$ systemctl list-units --all --state=inactive

# 列出所有加载失败的 Unit
$ systemctl list-units --failed

# 列出所有正在运行的、类型为 service 的 Unit
$ systemctl list-units --type=service

# 显示系统状态
$ systemctl status

# 显示单个 Unit 的状态
$ sysystemctl status xxx.service

# 立即启动一个服务
$ sudo systemctl start apache.service

# 立即停止一个服务
$ sudo systemctl stop apache.service

# 重启一个服务
$ sudo systemctl restart apache.service

# 杀死一个服务的所有子进程
$ sudo systemctl kill apache.service

# 重新加载一个服务的配置文件
$ sudo systemctl reload apache.service

#设置开机启动该服务
$ sudo systemctl enable xxx.service
# 等同于
$ sudo ln -s '/lib/systemd/system/xxx.service' 
'/etc/systemd/system/multi-user.target.wants/xxx.service'

#撤销符号链接关系
$ sudo systemctl disable xxx.service

其他脚本自动启动

还有几种系统配置自启动脚本的方式。其原理是,执行脚本加入相关配置文件中,在用户登录时会读取配置文件,从而执行相关脚本。

每个文件执行时机不同

/etc/profile:系统配置文件,用户登录时读取一次

/etc/bash.bashrc:系统配置文件 ,用户登录时读取一次,每次打开一个新终端会话时读取一次

~/.profile(~/.bash_profile、~/.bash_login):用户配置文件,用户登录时读取一次

~/.bashrc:用户配置文件,用户登录时读取一次,每次打开一个新终端会话时读取一次

需要注意的是:

  • 1、它只对 bash 有效
  • 2、系统配置文件作用于全局,而用户配置文件仅针对当前登录的用户
  • 3、先读取系统配置文件,再读取用户配置文件,用户配置文件的变量和表达式等都继承自系统配置文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值