Linux-开机启动自动运行脚本
总的说来,根据系统的不同,有两种实现开机自启的方法:rc.local
与systemd
。
rc.local
树莓派官方文档对rc.local
的介绍。值得注意的是:运行一个常驻脚本或者需要执行时间很长的脚本的时候,需要在命令最后加上&
来表明这条命令需要后台运行。否则会阻塞rc.local
后面的脚本执行。
除此之外,不是所有的命令都支持使用rc.local
的方式开机运行。
https://www.raspberrypi.org/documentation/linux/usage/rc-local.md
- 创建一个脚本文件
1 |
|
脚本内容:
1 |
|
该shell 代码中,指定运行方式为sh,在pi 目录创建一个test.txt 文件,并添加权限
最后将Hello Pi 语句定向到该txt 文件中
保存,退出。
- 给
my_script.sh
文件添加执行权限:
1 |
|
在此也可先测试一下脚本运行情况:
1 |
|
然后可以发现/home/pi
目录下多了test.txt
文件
- 将该文件设置为开机自启:
首先打开rc.local
文件
1 |
|
然后在exit 0
前面添加如下代码:
1 |
|
su
将会切换为pi
用户执行文件,且执行完后切换为原来用户。
保存即可。
随后开机便会发现/home/pi
目录下多了一个test.txt
文件
- 若是要开机自启其他类型的文件,例如
/home/pi
下的abc.py
文件,则先进入rc.local
文件:
1 |
|
然后添加:
1 |
|
最后的&
代表在后台运行
service命令
service命令其实是去/etc/init.d
目录下,去执行相关程序
在/etc/init.d/
目录下新建一个服务脚本文件。
在终端输入并回车pi@raspberry:~ $ sudo vi /etc/init.d/script_test
在空白文件中输入以下内容:
1 |
|
保存退出。设置脚本可执行权限:pi@raspberry:~ $ sudo chmod 777 /etc/init.d/script_test
最后将该脚本作为服务设置开机自动加载:pi@raspberry:~ $ sudo update-rc.d script_test defaults
sudo reboot
重启测试。
systemd systemctl
systemd是Linux系统最新的初始化系统(init),作用是提高系统的启动速度,尽可能启动较少的进程,尽可能更多进程并发启动。
systemd对应的进程管理命令是systemctl
参看:
systemctl Linux-服务管理命令-systemctl
service Linux-服务管理命令-service
Linux 服务管理两种方式service和systemctl https://www.cnblogs.com/shijingjing07/p/9301590.html
这个的作用是:将需要开机启动的命令变成一个service(服务),来实现开机运行的目的。
https://www.raspberrypi.com/documentation/computers/using_linux.html#the-systemd-daemon
1 |
|
我们对service和chkconfig两个命令都不陌生,systemctl 是管制服务的主要工具, 它整合了chkconfig 与 service功能于一体。
systemctl is-enabled iptables.service
systemctl is-enabled servicename.service #查询服务是否开机启动
systemctl enable *.service #开机运行服务
systemctl disable *.service #取消开机运行
systemctl start *.service #启动服务
systemctl stop *.service #停止服务
systemctl restart *.service #重启服务
systemctl reload *.service #重新加载服务配置文件
systemctl status *.service #查询服务运行状态
systemctl –failed #显示启动失败的服务
注:*代表某个服务的名字,如http的服务名为httpd