前言

为了方便,我们经常希望将一些常用的软件或者程序设为开机启动,这里我以Ubuntu16.04为例进行讲解,介绍几种常见的开机自启动方法。

1. startup application

  • Step1 给执行文件(自带文件头:#!/bin/sh或者#!/usr/bin/env python)权限:
1
sudo chmod 777 可执行文件
  • Step2 搜索Startup Application:

    1548781801348

    1548781812967

    直接添加任务名称Name任务执行文件绝对路径或者执行命令Command备注Comment

2. rc.local

我们可以直接在 /etc/rc.local中添加开机启动命令,:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
command
exit 0

另外,记得赋予待执行的源文件可执行权限。

3.init.d

下面保持当前路径为/etc/init.d

  • Step1 在/etc/init.d新建一个开机自启动文件,如:test

  • Step2 在test中写入指令,最好带上文件头:

1
2
#!/bin/sh
command &

之所以加上&是因为有些命令是一直执行的,可以放在后台执行。

  • Step3 赋权限:
1
sudo chmod 777 test
  • Step4 更新开机自启动列表:
1
2
3
sudo update-rc.d test defaults 
或者
sudo update-rc.d test defaults 数字

加上数字是为了防止有些开机自启动任务有顺序要求,数字越大越晚执行。

删除方式是:

1
sudo update-rc.d -f test remove

4. systemd

systemd是Ubuntu16.04及之后官方的开机自启动管理方式,我们可以在/etc/systemd/system中新建一个服务test.service,权限记得哦~,然后写入:

1
2
3
4
5
6
7
8
9
10
[Unit]
Description=this is test service

[Service]
Type=simple
ExecStart= <shell command> #启动命令
ExecStop=<shell command> #停止命令,可缺省

[Install]
WantedBy=multi-user.target #所有用户组都启动这个任务

各模块具体意义可参考这里

然后执行:

1
2
sudo systemctl daemon-reload
sudo systemctl enable test.service

如果想即刻运行,则:

1
sudo systemctl start test.service

注意:以上可通过systemctl status commandname.service 来查看开机自启动项目是否设立成功,也可以在开机之后利用进程监控。