既然要实现开机自动运行脚本,那么就与Linux开机自启服务的原理有关;Linux开机的时候,会有一步读取/etc/inittab配置文件,选定系统运行级别,然后进行系统初始化,执行/etc/rc.d/下的rc脚本;而其中/etc/rc.d/rc.local自启动脚本是Linux留给用户自定义个性启动项的一个脚本。
你只要打开这个脚本文件,看上面的解释,很明显的告诉你这个脚本文件的作用。用户可以在这里写入脚本,开机的时候会自动执行该脚本,启动想要启动的服务程序。
[root@bogon ~]# cat /etc/rc.d/rc.local
#!/bin/sh
#This script will be executed *after* all the other init scripts.
#You can put your own initialization stuff in here if you don't
#want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
[root@bogon ~]#
方案一:
使用/etc/rc.d/rc.local自启动脚本文件实现开机自动运行普通用户脚本
有两种实现方法:
1、把需要开机启动的脚本程序直接写入/etc/rc.d/rc.local文件中,这样子开机时就会自动执行这些脚本程序,运行对应的服务程序。需要在root环境下编辑
2、先把脚本程序写好,定义好路径,然后使用su命令来执行,这里只需把su命令写进/etc/rc.d/rc.local脚本文件中即可。
比如:我需要开机执行/home/ricky/bin/ricky.sh脚本,那么在/etc/rc.d/rc.local中加入以下语句:
[root@bogon~]#echo "su - ricky -c '/bin/sh /home/ricky/bin/ricky.sh'" >>/etc/rc.d/local
命令的执行路径一定要用绝对路径,防止因环境变量原因而出错。
方案二:
我们都了解/etc/init.d/目录下的所有文件都是脚本文件,这个目录下的脚本文件,在设置好开机自启动项后,在开机时会自动执行。
使用root账号,自启动脚本编辑脚(随意写的一个启动脚本)
[root@bogon ~]#vim /etc/init.d/networkstart
#!/bin/bash
#network start scripts
#chkconfig: 235 80 30 --235指定的启动级别,在哪写启动级别下启动;--80 启动的优先级;--30 关闭的优先级
service network start –-启动network服务(你也可以把普通用户脚本放这里,开机启动的时候就会执行;也可以定义好脚本路径,把执行脚本的命令放进这里)
文件默认是没有执行权限的,所以要调整好脚本文件权限
[root@bogon ~]# chmod +x /etc/init.d/networkstart
还需要加入启动项设置开机启动,使脚本文件生效
[root@bogon ~]# chkconfig --add networkstart 加入启动项
[root@bogon ~]# chkconfig networkstart on 设置开机自启动
如果开了防火墙,还得把防火墙关掉
[root@bogon ~]# service stop iptables 关闭防火墙
root@bogon ~]# setenforce 0 关闭SELinux