Linux自启动脚本及解决rc.local不执行脚本问题

使用的是rc.local上添加脚本方法。Ubuntu开机之后会执行/etc/rc.local文件中的脚本, 
所以我们可以直接在/etc/rc.local中添加启动脚本。

给出使用中碰到的问题及解决方法:

https://blog.csdn.net/benbenxiongyuan/article/details/58597036

 

如何测试自启动功能:

1、编辑/etc/rc.local,因为其为只读文件,需使其可写

 cd /etc
chmod a+w rc.local

这时你就可以编辑rc.local了,双击进入

Linux自启动脚本及解决rc.local不执行脚本问题_第1张图片

红框内容为添加测试内容,脚本在exit 0之前的内容

2、解决添加测试内容后,开机不自启方法

如上添加了打印两句话的指令,但是重启开机后,并没有执行

发现是由于shell的问题造成的。有些命令需要在bash shell中运行,而不能在dash中运行。

从Ubuntu 6.10开始,默认使用dash(theDebian Almquist Shell)而不是bash(the GNUBourne-Again Shell). 但Login Shell还是bash。

 

解决方法:

1、将/etc/rc.local的命令改成更加兼容的模式,将"#!/bin/sh"改为"#!/bin/bash" 

2、将/bin/sh重新链接到/bin/bash,方法如下:

方法一:终端执行 sudo dpkg-reconfigure dash,然后选择 no.

方法二:重新进行软链接,执行以下命令:

sudo rm /bin/sh
sudo ln -s /bin/bash /bin/sh

这样就将/bin/sh链接到了/bin/bash。reboot系统后,命令正常执行

我使用的是第一个方法连接的,实测可用。

此时,开机自启后,可以看到相应目录下的test.txt里被写入了指定内容。

使用rc.local自启脚本

Linux自启动脚本及解决rc.local不执行脚本问题_第2张图片

为了是在命令行中执行insmod命令安装的驱动能在重启之后还有的解决方法大致有一下两种方法:

(1)直接编译内核,把想安装的驱动在编译内核的时候给编译进去,这种方法比较麻烦,花的时候也比较的多,一般不采用这种方法(这种方法网上有很多资料可以参考)。

(2)这种方法比较简单:就是在启动脚本中加载模块,这样每次开机启动都自动加载相应的驱动模块。具体的方式如下:

      在文件/etc/rc.local中加载你想要的模块程序即可

在Linux上使用开源can驱动时,每次按照步骤安装了can驱动,但是开机重启后,驱动在内核就不存在了,需要重新安装。开发的是无人驾驶监控上位机,实车测试时,不可能每次都安装一遍驱动再运行软件,所以需要编写一个开机自启脚本,将can驱动在每次开机时insmod。

 

脚本如下:

#!/bin/bash
gnome-terminal
su
123
cd /home/admin123/文档/zpcican
modprobe sja1000
insmod ./zpcican.ko
ifconfig can0

 

别忘了给脚本权限:

chmod +x ./test1.sh

修改rc.local的属性,设置为可执行。在ubuntu 16.04中,默认状态下rc.local是不能执行的。所以,也必须像第二步一样,+x一下

 

不使用脚本,可以直接使用指令:https://blog.csdn.net/jiangganwu/article/details/82980105

即在rc.local的脚本处直接输入指令,而不是脚本的地址

1. 加载驱动模块: zpcican.ko

2. zpcican.ko存放路径:/home/admin123/文档/zpcican/zpcican.ko

3. 打开文件/etc/rc.local,添加加载命令 :

gnome-terminal      //打开终端的意思
su
123
cd /home/admin123/文档/zpcican
modprobe sja1000
insmod ./zpcican.ko
ifconfig can0

是不是和脚本一样,哈哈,其实是我懒得写脚本啦!

 

gnome-terminal 如果不加这个,需要先打开终端,再开软件,不然还是无法识别设备。

开机自启动用QT编写的程序

链接:

 

你可能感兴趣的:(Linux)