开机自启动: 系统开机自启动 和 软件开机自启动。(软件开机自启动是指随系统开机自启动的软件), 两者之间的关系:可类比 windows 系统开机自启动 和 随系统开机自启动的软件。
详细参考“win7 系统 和 软件开机自启动之间的区别”
首先了解一下Ubuntu关于启动项的大致分类,每一类都分为系统级和用户级
第一类upstart,或者叫job,由init管理,配置文件目录/etc/init,~/.init
第二类叫service,由rc.d管理,配置文件目录/etc/init.d,以及/etc/rc.local文件 ---管理进程
第三类叫cron,由contab管理,使用crontab进行配置 ---定期管理
第四类叫startup,由xdg管理,配置文件目录/etc/xdg/autostart,以及~/.config/autostart
运行命令:runlevel,可以查看自己系统的当前运行等级。
upstart任务适用于runlevel<5的脚本和程序,service任务适用于runlevel<=5的任务,cron任务则不一定,而startup一般工作在runlevel=5,也就是桌面级。
对于普通用户而言,你的桌面级应用应该使用startup,服务级应用(比如某些功能性的软件脚本)应该使用service,常规性配置可以使用cron,而与启动顺序有关的最好使用upstart。
开机自动运行程序
Linux加载后, 它将初始化硬件和设备驱动, 然后运行第一个进程init。init根据配置文件继续引导过程,启动其它进程。
/etc/rc.local脚本是一个ubuntu系统中自带的开机脚本,该脚本通常是系统最后启动的
登录时自动启动
用户登录时,bash先自动执行系统管理员建立的全局登录script:/etc/profile.d。
退出登录时自动运行
退出登录时,bash自动执行退出登录脚本: /.bash_logout。
所以只需要修改~/bash_logout,该文件即可,在文件最后加上想要执行的命令
定期自动运行程序
Linux有一个称为crond的守护程序,主要功能是周期性地检查 /var/spool/cron目录下的一组命令文件的内容,并在设定的时间执行这些文件中的命令。用户可以通过crontab 命令来建立、修改、删除这些命令文件。
定时自动执行程序
定时执行命令at 与crond 类似(但它只执行一次):命令在给定的时间执行,但不自动重复。at命令的一般格式为:at [ -f file ] time ,在指定的时间执行file文件中所给出的所有命令。
Ubuntu开机后文件执行顺序,跟大多数的Linux系统一样,Ubuntu的开机顺序如下:
- 加载BIOS,读取MBR(Main Boot Record)主引导记录,启动Boot Manager(启动引导管理器)
- 加载系统内核,启动init进程,init进程是Linux的根进程,所有的系统进程都是它的子进程。在/etc 下有init和init.d两个文件夹,init文件夹内都是配置文件,init.d文件夹下都是可执行文件。
- 启动init进程,第一个运行的程序就是/sbin/init 该程序会读取/etc/inittab文件,但是在Ubuntu下,没有这个文件,取而代之的是 /etc/init/rc-sysinit.conf,主要作用就是设定Linux运行等级
- 首先执行/etc/rcS.d/ 目录下的启动脚本,然后是/etc/rc*.d/ 目录。这里的/etc/rc*.d文件夹的脚本文件的链接目标为:/etc/init.d文件夹下的相应脚本(* 为运行的级别,0-6级别。如果您的运行级别为5,则执行 rc5.d ) ,命令:runlevel,查看运行级别。
- 根据 /etc/rcS.d/文件夹中对应的脚本,启动 Xwindow 服务器 xorg,Xwindow 为 Linux 下的图形用户界面系统。
- 启动登录界面,等待用户登录。
Ubuntu 设置系统环境变量和开机自启动
详细查看博客原文:“开机自启动”
Ubuntu 开机自启动有4种方式实现,如下:
1、 自动启动应用程序——rc.local脚本
① 在/etc/init.d/目录下创建脚本
vi /etc/init.d/nginx
② 更改脚本权限
chmod 775 /etc/init.d/nginx
③ 编写脚本内容
#! /bin/sh set -e PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DESC="nginx daemon" NAME=nginx DAEMON=/usr/local/nginx/sbin/$NAME SCRIPTNAME=/etc/init.d/$NAME PIDFILE=/var/run/$NAME.pid # If the daemon file is not found, terminate the script. test -x $DAEMON || exit 0 d_start() { $DAEMON || echo -n " already running" } d_stop() { kill -QUIT `cat $PIDFILE` || echo -n " not running" } d_reload() { kill -HUP `cat $PIDFILE` || echo -n " could not reload" } case "$1" in start) echo -n "Starting $DESC: $NAME" d_start echo "." ;; stop) echo -n "Stopping $DESC: $NAME" d_stop echo "." ;; reload) echo -n "Reloading $DESC configuration..." d_reload echo "reloaded." ;; restart) echo -n "Restarting $DESC: $NAME" d_stop # Sleep for two seconds before starting again, this should give the # Nginx daemon some time to perform a graceful stop. sleep 2 d_start echo "." ;; *) echo "Usage: $SCRIPTNAME {start|stop|restart|reload}" >&2 exit 3 ;; esac exit 0
④ 设置开机启动
1、sysv-rc-conf是一个强大的服务管理程序
1)运行:# sysv-rc-conf
#sudo apt-get update
#sudo apt-get install sysv-rc-conf ---安装 sysv-rc-conf
rc.local脚本是一个Ubuntu开机后会自动执行的脚本,在该脚本内添加命令行,开机时会自动执行。
2) 将 nginx 脚本直接加入到系统自动启动列表中
例如把 /etc/init.d/nginx 加入到系统自动 启动列表中:
运行命令:#sudo sysv-rc-conf nginx on ---运行完这个命令,rc5.d 目录中会自动生成一个 S20nginx 的文件。
2、 自动启动服务——update-rc.d
直接改/etc/rc0.d ~ /etc/rc6.d和/etc/rcS.d下的东西,S开头的表示启动,K开头的表示不启动,例如:想关闭vsftpd的开机自动启动,只需sudo mv /etc/rc2.d/S20vsftpd /etc/rc2.d/K20vsftpd 就可以了。
经查看,我们当前的启动级别是5,那么我们进入rc5.d目录,同时创建启动脚本,那么开机时就会自动启动该程序。不过普遍的我们都是在 /etc/init.d/ 目录下创建该脚本,然后通过软链接到rcN.d目录下。
3、 启动应用程序首选项
4、 使用Systemd
5. 将启动脚本 .sh 文件,放入 rc*.local 文件中
如
查看系统安装并运行jdk 的路径 :运行Linux: java -verbose JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 --运行jdk的路径 JAVA_BIN=$JAVA_HOME/bin JRE_HOME=$JAVA_HOME/jre JRE_BIN=$JRE_HOME/bin PATH=$JAVA_BIN:$JRE_BIN:$PATH export JAVA_HOME JRE_HOME PATH sh /usr/local/tomcat1-8080/bin/startup.sh sh /usr/local/tomcat2-8081/bin/startup.sh
最后,重启服务器进行测试,执行命令:reboot -n。reboot -n 命令是服务器保存数据后关机并重启
此方法最简单