有个需求,比如说我想要开机执行某个程序,就需要去做开机自启动相关操作。
准备工作:在/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