Linux系统下,如何使程序开机自启动。可以通过修改开机启动脚本 /etc/init.d/rcS ,添加要启动程序的路径完成。
比如,内核4.1.15中/etc/init.d/rcS修改如下:
#!/bin/sh
#
# rcS Call all S??* scripts in /etc/rcS.d in
# numerical/alphabetical order.
#
# Version: @(#)/etc/init.d/rcS 2.76 19-Apr-1999 miquels@cistron.nl
#
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
export QT_QPA_PLATFORM=eglfs
export FB_MULTI_BUFFER=2
#/usr/bin/dashboard &
/usr/bin/3Ddash &
#/usr/bin/serialPort &
# Make sure proc is mounted
#
[ -d "/proc/1" ] || mount /proc
#
# Source defaults.
#
. /etc/default/rcS
#
# Trap CTRL-C &c only in this shell so we can interrupt subprocesses.
#
trap ":" INT QUIT TSTP
#
# Call all parts in order.
#
exec /etc/init.d/rc S
其中:
PATH=/sbin:/bin:/usr/sbin:/usr/bin
设置默认有效执行路径
runlevel=S
The following runlevels are defined:
N System bootup (NONE).
S Single user mode (not to be switched to directly)
0 halt
1 single user mode
2 .. 5 multi user mode
6 reboot
用户等级,“S"表示单用户;
prevlevel=N
目前不太清楚,貌似shell变量
umask 022
权限的基本码-umask(屏蔽位),按规定,文件夹的基本码rwxrwxrwx(777),文件的基本码rw-rw-rw-(666)
umask的值在文件中有设定,默认情况下是022
export PATH runlevel prevlevel
export用于传递一个或多个变量的值到其他shell,相当于声明了一些“全局变量”
#/usr/bin/dashboard &
/usr/bin/3Ddash &
#/usr/bin/serialPort &
为添加的自启动程序路径,注意要包含在PATH中,这样才是有效路径
trap ":" INT QUIT TSTP
捕捉INT、QUIT、TSTP信号
trap 为shell中捕捉信号的命令,其基本形式有三种:
(1)trap "cmd" signal-list
trap收到与signal-list列出的信号相同时,执行cmd命令
(2)trap signal-list
执行信号的本身默认的操作
(3)trap " " signal-list
忽视signal-list指定的信号
exec /etc/init.d/rc S
转去执行/etc/init.d/rc的文件内容