ubuntu22启动运行脚本

早先的系统可能使用 rc.locl 或者 init.d 的方式,但这些都已经被逐步淘汰了,ubuntu16以后推荐使用注册systemd的方式

要创建一个自启动服务(脚本),分为以下三步:

  1. 创建shell脚本
  2. 向服务目录添加服务信息
  3. enable服务

例如我要创建一个mytouch服务,它会自动在启动时向桌面创建一个bingo文件

创建shell脚本 /usr/local/bin/mytouch.sh

向服务目录添加服务信息,即向 /etc/systemd/system 添加一个名为 mytouch.service 的文件,内容如下:

[Unit]
After=network.target

[Service]
ExecStart=/usr/local/bin/mytouch.sh

[Install]
WantedBy=default.target

该文件相当于服务的元信息,其内容为 INI 格式,分三个部分:

  • Unit:服务的基本信息,例如描述、依赖、启动顺序等,例如After=network,target表示网络就绪后启动脚本
  • Service:服务的执行方式,例如服务启动命令、环境变量、工作目录等
  • Install:服务的安装方式,也可以用于设置启动级别、启动顺序等,wantedBy就是用于设置启动级别的,常见的有 poweroff.target(关机时)、multi-user.target(多用户模式下)、reboot.target(重启时)等

注:这里有点问题,好像unit和install的功能重复了?

这俩文件创建完后别忘了赋予执行权限,否则,脚本不会执行,并且也没有报错,你会以为哪里写的有问题。

创建该文件就已经将服务注册进systemd了,但还需要enable服务,即执行命令 systemctl enable mytouch.service

此时系统启动就会自动运行该服务脚本了,对于本脚本来说,系统启动后就自动在桌面创建一个bingo文件

当然,既然已经注册成为了服务,就可以使用systemctl进行管理,例如可以随时使用 systemctl start mytouch.service 来执行脚本

若不想使用该服务了,执行 systemctl disable mytouch.service 然后删除上述两个文件即可

注:

  1. 服务注册好之后,脚本内容可以随时更改
  2. 脚本会以root用户权限运行

参考:

https://www.yii666.com/blog/662568.html

https://www.tutorialspoint.com/run-a-script-on-startup-in-linux

Leave a Comment