开机自启动设置方法
一、概述
Ubuntu 18.04版本默认没有/etc/rc.local文件,已经无法通过在该文件中添加脚本来保证开机自动执行。从Ubuntu 16.10版本开始不再使用initd管理系统,改用systemd管理系统,而通过systemd管理系统可以实现开机运行自己的脚本 ,本文讲解如何通过systemd来实现开机自动运行脚本。
二、配置方法
2.1 以root用户执行,不加载用户环境变量
2.1.1配置方法1
1.删除旧文件
sudo rm -rf /etc/systemd/system/rc-local.service(如果有该文件则删除,没有就不管)
2.打开文件,增加内容
sudo vim /lib/systemd/system/rc-local.service
3.增加内容
//文件最后添加以下内容
[Install]
WantedBy=multi-user.target
Alias=rc-local.service
4.增加待添加的服务,sudo vi /etc/rc.local
#!/bin/sh -e
echo "test info" > /usr/local/test.log &
exit 0
[注意事项]:
1. #!/bin/sh -e (不要⽤#!bin/bash)
2. ⾃⼰需要启动的程序写在exit 0之前
3. ⾮后台程序需要在命令租后加上&,否则会失败
4. 路径⽤绝对路径,不要⽤~这种符号
5. 不要cd到某个目录,直接给绝对路径
5.让配置生效
sudo systemctl enable rc-local
#该命令是将刚才的/lib/systemd/system/rc-local.service 内容⽣效,会产生一个软链接/etc/systemd/system/rc-local.service -> /lib/systemd/system/rc-local.service
sudo systemctl start rc-local #如果上面没有出错,则这里会正确
sudo systemctl status rc-loca
6.重启看是否生效
2.1.2配置方法2
注意:上面的第4步也可以这么改
1.创建rc.local文件
sudo vim /etc/rc.local
2.向rc.local文件添加以下内容
1.sudo vim /etc/rc.local
2.输入以下内容
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
echo "成功启动CAN驱动配置" > /usr/local/test.log
modprobe can(不需要加sudo,否则可能执行2次)
exit 0
3.给rc.local执行权限
4.启动服务
sudo systemctl enable rc-local
5.查看启动状态
sudo systemctl start rc-local.service
sudo systemctl status rc-local.service
2.1 以特定用户运行程序,此方法可以加载⽤户环境变量
1.只需要作如下修改,添加服务那一步
sudo vim /lib/systemd/system/rc-local.service
#!/bin/sh -e
sudo -u username echo "test info" > /usr/local/test.log &
exit0
【注意】:只需要将⾃⼰的命令前加上sudo -u usrname即可
2.
sudo systemctl set-default graphical.target
【拓展】:
⼀、开机默认进⼊命令⾏模式
1、输⼊命令:sudo systemctl set-default multi-user.target
2、重启:reboot
要进⼊图形界⾯,只需要输⼊命令startx
从图形界⾯切换回命令⾏:ctrl+alt+F7(有的是F1)
⼆、开机默认进⼊图形⽤户界⾯
1、输⼊命令:sudo systemctl set-default graphical.target
2、 sudo vim /lib/systemd/system/getty@.service
将下⾯
ExecStart=-/sbin/agetty --noclear %I $TERM
改为
ExecStart=-/sbin/agetty -a (username) --noclear %I $TERM
#该步骤为命令⾏免密登录,若是不需要,可不⽤该步骤
3、重启:reboot
要进⼊命令⾏模式:ctrl+alt+F2
从命令⾏切换到图形界⾯:ctrl+alt+F7(有的是F1)
三.参考链接
亲测有效:包括在ubuntu服务器,xaiver
ubuntu18.04设置开机启动命令脚本的三种⽅法
Ubuntu18.04及以上开机自启动脚本设置方法
ubuntu 18.04 如何设置开机自动启动脚本
ubuntu18.04设置开机自动启动脚本
linux下添加开机启动程序、脚本、服务
四、嵌入式平台
方式1.将写好的脚本(.sh文件)放到目录 /etc/profile.d/ 下,系统启动后就会自动执行该目录下的所有shell脚本。某些命令或脚本在/etc/rc.local中不能执行,此时,可以将脚本放在/etc/profile.d目录下,该目录下的脚本开机时自动被执行
方式2.放到/etc/profile也行,注意涉及到图形界面或者程序出错就会导致系统无法起来(慎重)
方式3.不需要用sudo的启动方式,将你的启动脚本复制到 /etc/init.d目录下,并设置脚本权限, 假设脚本为test
mv test /etc/init.d/test
sudo chmod 755 /etc/init.d/test
将该脚本放倒启动列表中去
cd .etc/init.d
sudo update-rc.d test defaults 95
注:其中数字95是脚本启动的顺序号,按照自己的需要相应修改即可。在你有多个启动脚本,而它们之间又有先后启动的依赖关系时你就知道这个数字的具体作用了
方式4,对于图形界面,把下面两句话添加到rc.local
source /etc/profile
/opt/qt5.5.1/apps/QDesktop/QDesktop >/dev/null 2>&1 &
五、总结
1.linux随机启动的服务程序都在/etc/init.d这个文件夹里,里面的文件全部都是脚本文件,用 户登录时,bash首先自动执行系统管理员建立的全局登录script :/ect/profile。然后bash在用户起始目录下按顺序查找三个特殊文件中的一个:/.bash_profile、/.bash_login、 /.profile,但只执行最先找到的一个。 因此,只需根据实际需要在上述文件中加入命令就可以实现用户登录时自动运行某些程序。 退出登录时自动运行程序: 退出登录时,bash自动执行个人的退出登录脚本/.bash_logout。
~/.bashrc、 ~/.bash_file 是当前用户目录下的配置信息
2./etc/profile文件是针对所有用户的,如果你只想让当前用户执行请使用~/.profile文件(当前用户的profile文件);
有些涉及调整图形桌面相关的命令只能在图形桌面启动之后执行,这时将相关命令放在/etc/profile中很多版本是不能生效或者会导致其他异常
六、总结2
我们习惯性的做法就是编写一个重启脚本,然后在 /etc/rc.local 中去完成开机执行。例如下面这样
$ cat /etc/rc.local
bash /root/script/restart.sh
2.通过 Crontab 实现
Crontab 可以使用 @reboot 来执行主机启动之后的命令。首先在命令行输入:
$ crontab -e
然后添加以下内容:
@reboot /root/script/restart.sh
完成后,这个脚本就可以在重启的时候自动执行了。
其它的一些进阶玩法:
在启动完成后的指定时间内运行脚本
# 在启动 5 分钟后运行指定脚本
@reboot sleep 300 && /home/wwwjobs/clean-static-cache.sh