Linux执行开机启动常用的有两个方法,一个是将脚本加入到rc.local,另一个是在计划任务crontab中。
rc.local开机启动不生效原因
1、rc.local没有执行权限
在Centos中,默认/etc/rc.local是个软链接,指向/etc/rc.d/rc.local,请确定这个文件有执行权限。
2、你的脚本本身的执行权限
以/root/ntpd.sh为例,要保证ntpd.sh是可以执行的。另外无论自已写的脚本还是编辑rc.local,最好都使用命令的完整路径。
如将/root/ntpd.sh下入到开机启动:

而不要
./root/ntpd.sh
完整路径能保证脚本的通用性,不然不是所有版本的Linux都能执行。
3、需要延迟启动
如果以上两条你都没问题,脚本还是不能开机启动,就是命令的生命周期的问题了,举例:
1、开机给一个虚拟网卡设置一个临时IP
2、开机执行一条添加路由的脚本
这时你会发现针对网卡的一些设置,可能你无论怎么设置都不能开机启动。示例中这些命令是需要Linux开机网络服务完全启动后才能设置的,而我们的设置是先执行之后才连接网络,执行后是不生效的。
这时可以新建个脚本start.sh,脚本命令如下:
#延迟60秒启动ntpd.sh sleep 60 /bin/bash /root/ntpd.sh然后将start.sh在rc.local中设置为开机启动,
/bin/bash /root/start.sh
使用crontab执行开机启动
命令:
crontab -e进入编辑:
@reboot /root/ntpd.sh
如果要延迟启动,可使用如下代码:
@reboot sleep 60;/root/ntpd.sh
crontab中执行@reboot需要管理员权限,普通用户权限是不能执行的。