在Ubuntu Xenial (Ubuntu 16)之前,开机应用自启动使用的是rc.local, Ubuntu Xenial及之后采用systemd, 而Ubuntu 16则在中间起着过渡作用,既可以使用rc.local,也可以使用systemd.我们这里采用新的方式.
systemd(system daemon)是Linux下的一种init软件,由Lennart Poettering带头开发,其开发目标是提供更优秀的框架以表示系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动,同时达到降低Shell的系统开销的效果,最终代替现在常用的System V与BSD风格init程序。传统sysvinit使用inittab来决定运行哪些shell脚本,大量使用shell脚本被认为是效率低下无法并行的原因。systemd使用了Linux专属技术,不再顾及POSIX兼容.
Systemd并不是一个命令,而是一组命令,涉及到系统管理的方方面面,有以下几类:
systemctl: 是Systemd的主命令,用于管理系统;
systemd-analyze:命令用于查看启动耗时;
hostnamectl: 命令用于查看当前主机的信息;
localectl: 命令用于查看本地化设置;
timedatectl: 命令用于查看当前时区设置;
loginctl: 命令用于查看当前登录的用户;
详细请参考: http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html
开机自启动,涉及到systemctl,下面是一些相关的命令:
# 重载所有配置
$ sudo systemctl daemon-reload
# 生成一个服务
$ sudo systemctl enable ${name}.service
# 删除一个服务
$ sudo systemctl disable ${name}.service
# 立即启动一个服务
$ sudo systemctl start ${name}.service
# 立即停止一个服务
$ sudo systemctl stop ${name}.service
# 重启一个服务
$ sudo systemctl restart ${name}.service
# kill掉一个服务的所有子进程
$ sudo systemctl kill ${name}.service
# 重新加载一个服务的配置文件
$ sudo systemctl reload ${name}.service
# 显示某个Unit的所有底层参数
$ systemctl show ${name}.service
# 显示某个Unit的指定属性的值,以httpd为例
$ systemctl show -p CPUShares httpd.service
# 设置某个Unit的指定属性
$ sudo systemctl set-property httpd.service CPUShares=500
1, 添加开机自启动脚本
1.1, 实现脚本
hellogirl.sh
#!/bin/sh -e
echo "hello, girl." > /tmp/hellogirl.log
exit 0
之后把hellogirl.sh放到一个指定目录,在这里我们这样做:
# 在/usr/local下创建一个专属文件夹,其它位置也可以
$ cd /usr/local
$ sudo mkdir tulip
$ cd tulip
# 编写hellogirl.sh脚本
$ sudo vim hellogirl.sh
# 然后把上面脚本内容复制进去,保存.
# 之后,添加可执行权限
$ sudo chmod +x hellogirl.sh
1.2, 编写服务
# 打开添加服务文件的位置
$ cd /lib/systemd/system
# 编写服务文件,这里直接复制一个进行修改
$ sudo cp rsyslog.service hellogirl.service
# 修改hellogirl.service
$ sudo vim hellogirl.service
hellogirl.service修改后如下:
[Unit]
Description=Hello girl shell Service
[Service]
Type=notify
ExecStart=/usr/local/tulip/hellogirl.s