有个需求,比如说我想要开机执行某个程序,就需要去做开机自启动相关操作。
准备工作:在/usr/local目录下建立sjf.sh
# vi sjf.sh //键入以下内容(前提:已安装nginx、mysql) service nginx start service mysql start //赋予可执行权限 # chmod -R 775 /usr/local/sjf.sh
方法一:更改/etc/rc.d/rc.local (常用)
在rc.local中加入运行sjf.sh脚本 # vi /etc/rc.d/rc.local //文本结尾加入以下命令 /usr/local/sjf.sh 按下ESC后键入:wq!保存退出 #rc.local授权(在Centos7下,/etc/rc.local文件是个软链接实际文件不具备执行权限,设置开机启动,需要给文件授权) chmod +x /etc/rc.d/rc.local chmod -R 775 /etc/rc.d/rc.local # reboot 重启服务器并查看效果
注意:
有时候我们在/etc/rc.d/rc.local里面增加的开机自启脚本和指令总是不能自动启动,机器启动后手动执行又能成功。这个问题解決方式如下,/etc/rc.d/rc.local文件的文件头是#!/bin/sh ,我们把这修改成#!/bin/sh -x,这样系统启动后就会把/etc/rc.d/rc.local里面的指令或脚本不能执行的日志写入/var/log/messages ,我们查看messages文件內容就知道具体的错误了。
方法二:crontab定时计划中的@reboot
# vi /etc/crontab //在文本结尾加上以下命令 @reboot /usr/local/sjf.sh
方法三:使用systemd服务
查看机器是否能用systemd服务,运行命令# ps aux, 看pid=1的进程是否是/usr/lib/systemd/systemd --switched-root --system --deserialize 22 在/etc/systemd/system下创建auto_start.service # vi auto_start.service //键入以下内容 [Unit] Description=The app auto run when reboot After=default.target [Service] ExecStart=/usr/local/sjf.sh [Install] WantedBy=default.target //重启systemd服务、设置开机自启动 # systemctl daemon-reload # systemctl enable auto_start.service #reboot
发表评论