# Start all init scripts in /etc/init.d
# executing them in numerical order.
#
for i in /etc/init.d/S??* ;do
# Ignore dangling symlinks (if any).
[ ! -f “KaTeX parse error: Expected 'EOF', got '&' at position 88: …oken operator">&̲amp;&</span…i” in
*.sh) #.sh结尾的脚本
# Source shell script for speed.
(
trap - INT QUIT TSTP #重置陷阱为启动shell时的陷阱
set start #设置传入的参数
. KaTeX parse error: Expected 'EOF', got '#' at position 38: …token comment">#̲执行,携带start参数</s…i start #执行,携带start参数
;;
esac
done
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
总结:检测大写S开头的所有脚本并执行它们。
trap 命令
rcK文件是设备关机或重启执行的文件,它和rcS差不多,只有传入的参数有微微差别
file:rcK
#!/bin/sh
# Stop all init scripts in /etc/init.d
# executing them in reversed numerical order.
#
for i in KaTeX parse error: Expected 'EOF', got '#' at position 218: …token comment">#̲()相当于反引号,首先执行命令,-r倒序排列
# Ignore dangling symlinks (if any).
[ ! -f “KaTeX parse error: Expected 'EOF', got '&' at position 88: …oken operator">&̲amp;&</span…i” in
*.sh)
# Source shell script for speed.
(
trap - INT QUIT TSTP
set stop
. KaTeX parse error: Expected 'EOF', got '#' at position 38: …token comment">#̲执行,携带stop参数</sp…i stop #执行,携带stop参数
;;
esac
done
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
总结:关机时还需要启动一遍启动脚本,只不过传入的参数是stop,需要处理一些后续工作才关机。
file:S01logging
#!/bin/sh
#
# Start logging
#
start() {
echo -n "Starting logging: "
start-stop-daemon -b -S -q -m -p /var/run/syslogd.pid --exec /sbin/syslogd – -n
start-stop-daemon -b -S -q -m -p /var/run/klogd.pid --exec /sbin/klogd – -n
echo “OK”
}
stop() {
echo -n "Stopping logging: "
start-stop-daemon -K -q -p /var/run/syslogd.pid
start-stop-daemon -K -q -p /var/run/klogd.pid
echo “OK”
}
case “$1” in
start)
start
;;
stop)
stop
;;
restart|reload)
stop
start
;;
*)
echo “Usage: $0 {start|stop|restart}”
exit 1
esac
exit $? #最后一次命令的执行状态码,0为正常。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
由rcS或者rcK脚本调用的子进程运行此脚本,传递start或stop参数来控制执行start函数或stop函数。
start-stop-daemon守护进程启停工具命令
参数
-b | --background 后台运行
-S | --start – <argument> 开启一个系统守护程序,并传递参数给它
-K | --stop 停止一个程序
-q | --quiet 不要输出警告
-m| --make-pidfile 当命令本身不创建pidfile时,由start-stop-daemon创建
-p | --pidfile <pid-file> 要检查的pid文件
-x | --exec <executable> 程序启动/检查它是否正在运行
-n | --name <process-name> 要检查的进程名称
file:S10udev
#!/bin/sh
#
# udev This is a minimal non-LSB version of a UDEV startup script. It
# was derived by stripping down the udev-058 LSB version for use
# with buildroot on embedded hardware using Linux 2.6.34+ kernels.
#
# You may need to customize this for your system's resource limits
# (including startup time!) and administration. For example, if
# your early userspace has a custom initramfs or initrd you might
# need /dev much earlier; or without hotpluggable busses (like USB,
# PCMCIA, MMC/SD, and so on) your /dev might be static after boot.
#
# This script assumes your system boots right into the eventual root
# filesystem, and that init runs this udev script before any programs
# needing more device nodes than the bare-bones set -- /dev/console,
# /dev/zero, /dev/null -- that's needed to boot and run this script.
#
# Check for missing binaries
UDEV_BIN=/sbin/udevd
test -x $UDEV_BIN || exit 5 #文件不可执行则退出,退出码:5
# Check for config file and read it
UDEV_CONFIG=/etc/udev/udev.conf
test -r KaTeX parse error: Expected 'EOF', got '#' at position 129: …token comment">#̲文件不可读则退出,退出码:6<…UDEV_CONFIG
case "KaTeX parse error: Expected 'EOF', got '#' at position 134: …token comment">#̲设备开机时</span> …{udev_root:-/dev} using udev: "
printf ‘\000\000\000\000’ > /proc/sys/kernel/hotplug
$UDEV_BIN -d || (echo “FAIL” && exit 1) #执行失败打印“FAIL”并退出
udevadm trigger --type=subsystems --action=add
udevadm trigger --type=devices --action=add
udevadm settle --timeout=30 || echo “udevadm settle failed”
echo “done”
;;
stop) #设备关机或重启
# Stop execution of events
udevadm control --stop-exec-queue
killall udevd
;;
*)
echo “Usage: $0 {start|stop}”
exit 1
;;
esac
exit 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
udevadm命令详解
udevadm trigger [options] 接收内核发送来的设备事件。主要用于重放coldplug事件信息
–type=type 触发一个特殊的设备。合法的类型:devices,subsystem,failed.默认是devices
–action=action 被触发的事件,默认是change
udevadm settle [options] 查看udev事件队列,如果所有事件全部处理完就退出。
–timeout=seconds 等待事件队列空的最大时间。默认是180秒。如果是0则立即退出。
udevadm control [options] 控制udev守护进程(systemd-udevd)的内部状态。
-s, --stop-exec-queue 向 systemd-udevd 发送"禁止处理事件"信号, 这样所有新发生的事件都将进入等候队列。
file:S13portmap
#! /bin/sh
[ -f /sbin/portmap ] || exit 0 #不存在此文件就退出
start() {
echo -n "Starting portmap: "
portmap
mkdir -p /var/lock/subsys
touch /var/lock/subsys/portmap #锁定此服务
echo “done”
}
stop() {
echo -n "Stopping portmap: "
echo
killall portmap
rm -rf /var/lock/subsys
echo “done”
}
restart() {
stop
start
rm -f /var/run/portmap.state
}
# See how we were called.
case “$1” in
start)
start
;;
stop)
stop
;;
restart|reload)
restart
;;
*)
echo “Usage: $0 {start|stop|reload|restart}”
exit 1
esac
exit $?
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
参考:portmap的作用
file:S20urandom
#! /bin/sh
#
# urandom This script saves the random seed between reboots.
# It is called from the boot, halt and reboot scripts.
#
# Version: @(#)urandom 1.33 22-Jun-1998 miquels@cistron.nl
#
[ -c /dev/urandom ] || exit 0 #不存在字符设备urandom就退出
#. /etc/default/rcS
case “KaTeX parse error: Expected 'EOF', got '#' at position 227: …token comment">#̲ check for read…VERBOSE” != no ]
then
echo -n “Initializing random number generator… “
fi
# Load and then save 512 bytes,
# which is the size of the entropy pool
cat /etc/random-seed >/dev/urandom
rm -f /etc/random-seed
umask 077 #配置文件夹默认权限
dd if=/dev/urandom of=/etc/random-seed count=1
>/dev/null 2>&1 || echo “urandom start: failed.”
umask 022
[ ”KaTeX parse error: Expected 'EOF', got '&' at position 136: …oken operator">&̲amp;&</span…VERBOSE” != no ] && echo -n “Saving random seed… “
umask 077
dd if=/dev/urandom of=/etc/random-seed count=1
>/dev/null 2>&1 || echo “urandom stop: failed.”
[ ”$VERBOSE” != no ] && echo “done.”
;;
*)
echo “Usage: urandom {start|stop}” >&2
exit 1
;;
esac
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
file:S30dbus
#!/bin/sh
#
# messagebus: The D-BUS systemwide message bus
#
# chkconfig: 345 97 03
# description: This is a daemon which broadcasts notifications of system events \
# and other messages. See http://www.freedesktop.org/software/dbus/
#
# processname: dbus-daemon
# pidfile: /var/run/messagebus.pid
#
# Sanity checks.
[ -x /usr/bin/dbus-daemon ] || exit 0 #非可执行文件则退出
# Create needed directories.
[ -d /var/run/dbus ] || mkdir -p /var/run/dbus #无此目录则创建, -p 循环创建,多层目录结构
[ -d /var/lock/subsys ] || mkdir -p /var/lock/subsys
[ -d /tmp/dbus ] || mkdir -p /tmp/dbus
RETVAL=0
start() {
echo -n "Starting system message bus: "
dbus-uuidgen --ensure
dbus-daemon --system
RETVAL<span class="token operator">=</span><span class="token variable">$?</span>
<span class="token keyword">echo</span> <span class="token string">"done"</span>
<span class="token punctuation">[</span> <span class="token variable">$RETVAL</span> -eq 0 <span class="token punctuation">]</span> <span class="token operator">&&</span> <span class="token function">touch</span> /var/lock/subsys/dbus-daemon <span class="token comment">#dbus-daemon命令执行正常,锁定</span>
}
stop() {
echo -n "Stopping system message bus: "
<span class="token comment">## we don't want to kill all the per-user $processname, we want</span>
<span class="token comment">## to use the pid file *only*; because we use the fake nonexistent </span>
<span class="token comment">## program name "$servicename" that should be safe-ish</span>
<span class="token function">killall</span> dbus-daemon
RETVAL<span class="token operator">=</span><span class="token variable">$?</span>
<span class="token keyword">echo</span> <span class="token string">"done"</span>
<span class="token keyword">if</span> <span class="token punctuation">[</span> <span class="token variable">$RETVAL</span> -eq 0 <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">then</span>
<span class="token function">rm</span> -f /var/lock/subsys/dbus-daemon
<span class="token function">rm</span> -f /var/run/messagebus.pid
<span class="token keyword">fi</span>
}
# See how we were called.
case "
1
<
/
s
p
a
n
>
"
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
k
e
y
w
o
r
d
"
>
i
n
<
/
s
p
a
n
>
s
t
a
r
t
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
)
<
/
s
p
a
n
>
s
t
a
r
t
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
;
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
;
<
/
s
p
a
n
>
s
t
o
p
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
)
<
/
s
p
a
n
>
s
t
o
p
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
;
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
;
<
/
s
p
a
n
>
s
t
a
t
u
s
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
)
<
/
s
p
a
n
>
s
t
a
t
u
s
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
v
a
r
i
a
b
l
e
"
>
1</span>"</span> <span class="token keyword">in</span> start<span class="token punctuation">)</span> start <span class="token punctuation">;</span><span class="token punctuation">;</span> stop<span class="token punctuation">)</span> stop <span class="token punctuation">;</span><span class="token punctuation">;</span> status<span class="token punctuation">)</span> status <span class="token variable">
1</span>"</span><spanclass="tokenkeyword">in</span>start<spanclass="tokenpunctuation">)</span>start<spanclass="tokenpunctuation">;</span><spanclass="tokenpunctuation">;</span>stop<spanclass="tokenpunctuation">)</span>stop<spanclass="tokenpunctuation">;</span><spanclass="tokenpunctuation">;</span>status<spanclass="tokenpunctuation">)</span>status<spanclass="tokenvariable">processname
RETVAL=
?
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
;
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
;
<
/
s
p
a
n
>
r
e
s
t
a
r
t
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
)
<
/
s
p
a
n
>
s
t
o
p
s
t
a
r
t
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
;
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
;
<
/
s
p
a
n
>
c
o
n
d
r
e
s
t
a
r
t
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
)
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
k
e
y
w
o
r
d
"
>
i
f
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
[
<
/
s
p
a
n
>
−
f
/
v
a
r
/
l
o
c
k
/
s
u
b
s
y
s
/
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
v
a
r
i
a
b
l
e
"
>
?</span> <span class="token punctuation">;</span><span class="token punctuation">;</span> restart<span class="token punctuation">)</span> stop start <span class="token punctuation">;</span><span class="token punctuation">;</span> condrestart<span class="token punctuation">)</span> <span class="token keyword">if</span> <span class="token punctuation">[</span> -f /var/lock/subsys/<span class="token variable">
?</span><spanclass="tokenpunctuation">;</span><spanclass="tokenpunctuation">;</span>restart<spanclass="tokenpunctuation">)</span>stopstart<spanclass="tokenpunctuation">;</span><spanclass="tokenpunctuation">;</span>condrestart<spanclass="tokenpunctuation">)</span><spanclass="tokenkeyword">if</span><spanclass="tokenpunctuation">[</span>−f/var/lock/subsys/<spanclass="tokenvariable">servicename ]; then
stop
start
fi
;;
reload)
echo “Message bus can’t reload its configuration, you have to restart it”
RETVAL=$?
;;
*)
echo "Usage:
0
<
/
s
p
a
n
>
s
t
a
r
t
∣
s
t
o
p
∣
s
t
a
t
u
s
∣
r
e
s
t
a
r
t
∣
c
o
n
d
r
e
s
t
a
r
t
∣
r
e
l
o
a
d
"
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
;
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
;
<
/
s
p
a
n
>
e
s
a
c
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
k
e
y
w
o
r
d
"
>
e
x
i
t
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
v
a
r
i
a
b
l
e
"
>
0</span> {start|stop|status|restart|condrestart|reload}"</span> <span class="token punctuation">;</span><span class="token punctuation">;</span> esac <span class="token keyword">exit</span> <span class="token variable">
0</span>start∣stop∣status∣restart∣condrestart∣reload"</span><spanclass="tokenpunctuation">;</span><spanclass="tokenpunctuation">;</span>esac<spanclass="tokenkeyword">exit</span><spanclass="tokenvariable">RETVAL
dbus-uuidgen 命令生成或读取一个全局唯一ID
–ensure[=FILENAME]
如果未提供文件名,则默认为 localstatedir / lib / dbus / machine-id(localstatedir通常为/ var)。如果该文件存在,则将对其进行验证,如果包含错误的内容,则返回失败代码。如果该文件不存在,则将使用新的uuid创建该文件。成功时,不输出任何输出。
dbus-daemon — Message bus daemon 消息总线守护进程
–system 使用系统范围消息总线的标准配置文件。
file:S40network
#!/bin/sh
#
# Start the network....
#
# Debian ifupdown needs the /run/network lock directory
mkdir -p /run/network
case “$1” in
start)
echo “Starting network…”
/sbin/ifup -a
;;
stop)
echo -n “Stopping network…”
/sbin/ifdown -a
;;
restart|reload)
“$0” stop
“$0” start
;;
*)
echo “Usage: $0 {start|stop|restart}”
exit 1
esac
exit $?
# Allow a few customizations from a config file
test -r /etc/default/dropbear && . /etc/default/dropbear #为可读文件则执行
start() {
DROPBEAR_ARGS=“$DROPBEAR_ARGS -R”
<span class="token comment"># If /etc/dropbear is a symlink to /var/run/dropbear, and</span>
<span class="token comment"># - the filesystem is RO (i.e. we can not rm the symlink),</span>
<span class="token comment"># create the directory pointed to by the symlink.</span>
<span class="token comment"># - the filesystem is RW (i.e. we can rm the symlink),</span>
<span class="token comment"># replace the symlink with an actual directory</span>
<span class="token keyword">if</span> <span class="token punctuation">[</span> -L /etc/dropbear \ <span class="token comment">#是一个符号链接</span>
-a <span class="token string">"<span class="token variable"><span class="token variable">$(</span>readlink /etc/dropbear<span class="token variable">)</span></span>"</span> <span class="token operator">=</span> <span class="token string">"/var/run/dropbear"</span> <span class="token punctuation">]</span> <span class="token comment">#文件存在</span>
<span class="token keyword">then</span>
<span class="token keyword">if</span> <span class="token function">rm</span> -f /etc/dropbear <span class="token operator">></span>/dev/null 2<span class="token operator">></span><span class="token operator">&</span>1<span class="token punctuation">;</span> <span class="token keyword">then</span> <span class="token comment">#错误输出重定向到标准输出,标准输出重定向到空文件(不打印任何东西)</span>
<span class="token function">mkdir</span> -p /etc/dropbear <span class="token comment">#成功删除则创建此目录</span>
<span class="token keyword">else</span>
<span class="token keyword">echo</span> <span class="token string">"No persistent location to store SSH host keys. New keys will be"</span>
<span class="token keyword">echo</span> <span class="token string">"generated at each boot. Are you sure this is what you want to do?"</span>
<span class="token function">mkdir</span> -p <span class="token string">"<span class="token variable"><span class="token variable">$(</span>readlink /etc/dropbear<span class="token variable">)</span></span>"</span>
<span class="token keyword">fi</span>
<span class="token keyword">fi</span>
<span class="token keyword">echo</span> -n <span class="token string">"Starting dropbear sshd: "</span>
<span class="token function">umask</span> 077
start-stop-daemon -S -q -p /var/run/dropbear.pid \
--exec /usr/sbin/dropbear -- <span class="token variable">$DROPBEAR_ARGS</span>
<span class="token punctuation">[</span> <span class="token variable">$?</span> <span class="token operator">=</span> 0 <span class="token punctuation">]</span> <span class="token operator">&&</span> <span class="token keyword">echo</span> <span class="token string">"OK"</span> <span class="token operator">||</span> <span class="token keyword">echo</span> <span class="token string">"FAIL"</span>
}
stop() {
echo -n "Stopping dropbear sshd: "
start-stop-daemon -K -q -p /var/run/dropbear.pid
[ $? = 0 ] && echo “OK” || echo “FAIL”
}
restart() {
stop
start
}
case “$1” in
start)
start
;;
stop)
stop
;;
restart|reload)
restart
;;
*)
echo “Usage: $0 {start|stop|restart}”
exit 1
esac
exit $?
start-stop-daemon守护进程启停工具命令
参数
-S | --start – <argument> 开启一个系统守护程序,并传递参数给它
-K | --stop 停止一个程序
-q | --quiet 不要输出警告
-p | --pidfile <pid-file> 要检查的pid文件
-x | --exec <executable> 程序启动/检查它是否正在运行
file:S50sshd
#!/bin/sh
#
# sshd Starts sshd.
#
# Make sure the ssh-keygen progam exists
[ -f /usr/bin/ssh-keygen ] || exit 0
# Create any missing keys
/usr/bin/ssh-keygen -A
umask 077
start() {
echo -n "Starting sshd: "
/usr/sbin/sshd
wr touch /var/lock/sshd
echo “OK”
}
stop() {
echo -n "Stopping sshd: "
wr killall sshd
wr rm -f /var/lock/sshd
echo “OK”
}
restart() {
stop
start
}
case “$1” in
start)
start
;;
stop)
stop
;;
restart|reload)
restart
;;
*)
echo “Usage: $0 {start|stop|restart}”
exit 1
esac
exit $?
start() {
echo -n "Starting telnetd: "
start-stop-daemon -S -q -m -b -p /var/run/telnetd.pid
-x /usr/sbin/telnetd – -F
[ $? = 0 ] && echo “OK” || echo “FAIL”
}
stop() {
echo -n "Stopping telnetd: "
start-stop-daemon -K -q -p /var/run/telnetd.pid
-x /usr/sbin/telnetd
[ $? = 0 ] && echo “OK” || echo “FAIL”
}
case “$1” in
start)
start
;;
stop)
stop
;;
restart|reload)
stop
start
;;
*)
echo “Usage: $0 {start|stop|restart}”
exit 1
esac
exit $?
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
start-stop-daemon守护进程启停工具命令
参数
-S | --start – <argument> 开启一个系统守护程序,并传递参数给它
-K | --stop 停止一个程序
-q | --quiet 不要输出警告
-m| --make-pidfile 当命令本身不创建pidfile时,由start-stop-daemon创建
-b | --background 后台运行
-p | --pidfile <pid-file> 要检查的pid文件
-x | --exec <executable> 程序启动/检查它是否正在运行
file:S70vsftpd
#! /bin/sh
set -e
DESC=“vsftpd”
NAME=vsftpd
DAEMON=/usr/sbin/$NAME
case "
1
<
/
s
p
a
n
>
"
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
k
e
y
w
o
r
d
"
>
i
n
<
/
s
p
a
n
>
s
t
a
r
t
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
)
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
k
e
y
w
o
r
d
"
>
e
c
h
o
<
/
s
p
a
n
>
−
n
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
s
t
r
i
n
g
"
>
"
S
t
a
r
t
i
n
g
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
v
a
r
i
a
b
l
e
"
>
1</span>"</span> <span class="token keyword">in</span> start<span class="token punctuation">)</span> <span class="token keyword">echo</span> -n <span class="token string">"Starting <span class="token variable">
1</span>"</span><spanclass="tokenkeyword">in</span>start<spanclass="tokenpunctuation">)</span><spanclass="tokenkeyword">echo</span>−n<spanclass="tokenstring">"Starting<spanclass="tokenvariable">DESC: "
start-stop-daemon -S -b -x
N
A
M
E
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
k
e
y
w
o
r
d
"
>
e
c
h
o
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
s
t
r
i
n
g
"
>
"
O
K
"
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
;
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
;
<
/
s
p
a
n
>
s
t
o
p
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
)
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
k
e
y
w
o
r
d
"
>
e
c
h
o
<
/
s
p
a
n
>
−
n
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
s
t
r
i
n
g
"
>
"
S
t
o
p
p
i
n
g
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
v
a
r
i
a
b
l
e
"
>
NAME</span> <span class="token keyword">echo</span> <span class="token string">"OK"</span> <span class="token punctuation">;</span><span class="token punctuation">;</span> stop<span class="token punctuation">)</span> <span class="token keyword">echo</span> -n <span class="token string">"Stopping <span class="token variable">
NAME</span><spanclass="tokenkeyword">echo</span><spanclass="tokenstring">"OK"</span><spanclass="tokenpunctuation">;</span><spanclass="tokenpunctuation">;</span>stop<spanclass="tokenpunctuation">)</span><spanclass="tokenkeyword">echo</span>−n<spanclass="tokenstring">"Stopping<spanclass="tokenvariable">DESC: “
start-stop-daemon -K -x
N
A
M
E
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
k
e
y
w
o
r
d
"
>
e
c
h
o
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
s
t
r
i
n
g
"
>
"
O
K
"
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
;
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
;
<
/
s
p
a
n
>
r
e
s
t
a
r
t
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
o
p
e
r
a
t
o
r
"
>
∣
<
/
s
p
a
n
>
f
o
r
c
e
−
r
e
l
o
a
d
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
)
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
k
e
y
w
o
r
d
"
>
e
c
h
o
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
s
t
r
i
n
g
"
>
"
R
e
s
t
a
r
t
i
n
g
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
v
a
r
i
a
b
l
e
"
>
NAME</span> <span class="token keyword">echo</span> <span class="token string">"OK"</span> <span class="token punctuation">;</span><span class="token punctuation">;</span> restart<span class="token operator">|</span>force-reload<span class="token punctuation">)</span> <span class="token keyword">echo</span> <span class="token string">"Restarting <span class="token variable">
NAME</span><spanclass="tokenkeyword">echo</span><spanclass="tokenstring">"OK"</span><spanclass="tokenpunctuation">;</span><spanclass="tokenpunctuation">;</span>restart<spanclass="tokenoperator">∣</span>force−reload<spanclass="tokenpunctuation">)</span><spanclass="tokenkeyword">echo</span><spanclass="tokenstring">"Restarting<spanclass="tokenvariable">DESC: “
$0 stop
sleep 1
$0 start
echo ””
;;
*)
echo “Usage: $0 {start|stop|restart|force-reload}” >&2
exit 1
;;
esac
exit 0
start-stop-daemon守护进程启停工具命令
参数
-S | --start – <argument> 开启一个系统守护程序,并传递参数给它
-K | --stop 停止一个程序
-b | --background 后台运行
-x | --exec <executable> 程序启动/检查它是否正在运行
file:S80mount-opt
#!/bin/sh
#
# mount /dev/mtdblock6 of nandflash in /opt directory
#
start() {
echo -n "Start mount /opt: "
ubiattach /dev/ubi_ctrl -m 6 -d 1 &&
mount -t ubifs ubi1_0 /opt #ubifs文件系统ubi1_0挂载到/opt目录下
<span class="token keyword">if</span> <span class="token punctuation">[</span> <span class="token variable">$?</span> <span class="token operator">==</span> 0 <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">then</span> <span class="token comment">#上一条命令:挂载成功返回0</span>
<span class="token keyword">echo</span> <span class="token string">"Mount /opt ok"</span>
<span class="token keyword">else</span>
<span class="token keyword">echo</span> <span class="token string">"flash_erase /dev/mtd6"</span>
ubidetach -p /dev/mtd6
flash_erase /dev/mtd6 0 0
ubiformat /dev/mtd6
ubiattach /dev/ubi_ctrl -m 6 -d 1
ubimkvol /dev/ubi1 -N opt -m
<span class="token function">mount</span> -t ubifs ubi1_0 /opt
<span class="token keyword">fi</span>
}
stop() {
echo -n "Unmount /opt: "
umount /opt
ubidetach -p /dev/mtd6
echo “Unmount /opt OK”
}
restart() {
stop
start
}
case “$1” in
start)
start
;;
stop)
stop
;;
restart|reload)
restart
;;
*)
echo “Usage: $0 {start|stop|restart}”
exit 1
esac
exit $?
ubi命令用法
ubiattach
-m, --mtdn=<number>此选项是必须的
MTD device number to attach (alternative method, e.g if the character device node does not exist) 。
附加的MTD设备编号(替代方法,e.g 如果字符设备节点不存在)
注意:是从0开始的。
-d, --devn=<number>
the number to assign to the newly created UBI device (assigned automatically if this is not specified)
分配给新创建的UBI设备的号码(如果没有指定,则自动分配)
ubidetach
-p, --dev-path=<path>
要附加的MTD设备节点的路径。
ubiformat
格式化MTD设备,擦除Flash,保存擦除计数,写入UBI镜像到Flash。
flash_erase命令有类似的效果。
ubimkvol
从UBI设备上创建UBI卷。
-N, --name=<name>
卷名 。
-m, --maxavsize
将卷大小设置为最大可用大小。
file:S81web.sh
#!/bin/sh
/usr/local/webs/bin/webs &
file:S90start_userapp.sh
#!/bin/sh
# set ip
ifconfig eth0 192.168.1.131 #配置eth0接口网络
ifconfig eth1 192.168.2.136
# disable rtc clk_out pins default
echo 0 > /sys/class/rtc/rtc0/device/clk_out_ctl #禁用RTC clk_out引脚
# if test function in sd card then exec
if [ -f “/media/mmcblk0p1/function/functiontest.sh” ]; then #内存卡自定义程序
echo “Start functiontest.sh”
cd /media/mmcblk0p1/function
./functiontest.sh &
fi
# you can add your app start_command here
file:socketcand
#! /bin/sh
### BEGIN INIT INFO
# Provides: socketcand
# Required-Start: $remote_fs
# Required-Stop: $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: socketcand
# Description: daemon that provides network access to local CAN busses
### END INIT INFO
[ -f /etc/default/rcS ] && . /etc/default/rcS #一般文件(非目录或设备文件)
PATH=/bin:/usr/bin:/sbin:/usr/sbin
prefix=/usr
exec_prefix=/usr
DAEMON=${exec_prefix}/bin/socketcand
DESC=“SocketCAN daemon”
NAME=“socketcand”
PIDFILE=/var/run/socketcand.pid
test -x $DAEMON || exit 0 #/usr/bin/socketcand文件非可执行文件则退出
case “
1
<
/
s
p
a
n
>
"
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
k
e
y
w
o
r
d
"
>
i
n
<
/
s
p
a
n
>
s
t
a
r
t
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
)
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
k
e
y
w
o
r
d
"
>
e
c
h
o
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
s
t
r
i
n
g
"
>
"
S
t
a
r
t
i
n
g
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
v
a
r
i
a
b
l
e
"
>
1</span>"</span> <span class="token keyword">in</span> start<span class="token punctuation">)</span> <span class="token keyword">echo</span> <span class="token string">"Starting <span class="token variable">
1</span>"</span><spanclass="tokenkeyword">in</span>start<spanclass="tokenpunctuation">)</span><spanclass="tokenkeyword">echo</span><spanclass="tokenstring">"Starting<spanclass="tokenvariable">DESC” “
N
A
M
E
<
/
s
p
a
n
>
"
<
/
s
p
a
n
>
s
t
a
r
t
−
s
t
o
p
−
d
a
e
m
o
n
−
−
s
t
a
r
t
−
−
q
u
i
e
t
−
−
b
a
c
k
g
r
o
u
n
d
−
−
p
i
d
f
i
l
e
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
v
a
r
i
a
b
l
e
"
>
NAME</span>"</span> start-stop-daemon --start --quiet --background --pidfile <span class="token variable">
NAME</span>"</span>start−stop−daemon−−start−−quiet−−background−−pidfile<spanclass="tokenvariable">PIDFILE --startas
D
A
E
M
O
N
<
/
s
p
a
n
>
−
m
−
−
−
−
d
a
e
m
o
n
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
;
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
;
<
/
s
p
a
n
>
s
t
o
p
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
)
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
k
e
y
w
o
r
d
"
>
e
c
h
o
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
s
t
r
i
n
g
"
>
"
S
t
o
p
p
i
n
g
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
v
a
r
i
a
b
l
e
"
>
DAEMON</span> -m -- --daemon <span class="token punctuation">;</span><span class="token punctuation">;</span> stop<span class="token punctuation">)</span> <span class="token keyword">echo</span> <span class="token string">"Stopping <span class="token variable">
DAEMON</span>−m−−−−daemon<spanclass="tokenpunctuation">;</span><spanclass="tokenpunctuation">;</span>stop<spanclass="tokenpunctuation">)</span><spanclass="tokenkeyword">echo</span><spanclass="tokenstring">"Stopping<spanclass="tokenvariable">DESC” "
N
A
M
E
<
/
s
p
a
n
>
"
<
/
s
p
a
n
>
s
t
a
r
t
−
s
t
o
p
−
d
a
e
m
o
n
−
−
s
t
o
p
−
−
q
u
i
e
t
−
−
p
i
d
f
i
l
e
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
v
a
r
i
a
b
l
e
"
>
NAME</span>"</span> start-stop-daemon --stop --quiet --pidfile <span class="token variable">
NAME</span>"</span>start−stop−daemon−−stop−−quiet−−pidfile<spanclass="tokenvariable">PIDFILE --oknodo --startas
D
A
E
M
O
N
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
f
u
n
c
t
i
o
n
"
>
r
m
<
/
s
p
a
n
>
−
f
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
v
a
r
i
a
b
l
e
"
>
DAEMON</span> <span class="token function">rm</span> -f <span class="token variable">
DAEMON</span><spanclass="tokenfunction">rm</span>−f<spanclass="tokenvariable">PIDFILE
;;
restart)
$0 stop
sleep 1
0
<
/
s
p
a
n
>
s
t
a
r
t
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
;
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
;
<
/
s
p
a
n
>
f
o
r
c
e
−
r
e
l
o
a
d
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
p
u
n
c
t
u
a
t
i
o
n
"
>
)
<
/
s
p
a
n
>
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
k
e
y
w
o
r
d
"
>
i
f
<
/
s
p
a
n
>
s
t
a
r
t
−
s
t
o
p
−
d
a
e
m
o
n
−
−
s
t
o
p
−
−
t
e
s
t
−
−
q
u
i
e
t
−
−
p
i
d
f
i
l
e
<
s
p
a
n
c
l
a
s
s
=
"
t
o
k
e
n
v
a
r
i
a
b
l
e
"
>
0</span> start <span class="token punctuation">;</span><span class="token punctuation">;</span> force-reload<span class="token punctuation">)</span> <span class="token keyword">if</span> start-stop-daemon --stop --test --quiet --pidfile <span class="token variable">
0</span>start<spanclass="tokenpunctuation">;</span><spanclass="tokenpunctuation">;</span>force−reload<spanclass="tokenpunctuation">)</span><spanclass="tokenkeyword">if</span>start−stop−daemon−−stop−−test−−quiet−−pidfile<spanclass="tokenvariable">PIDFILE --startas $DAEMON ; then
$0 restart
fi
;;
*)
echo “Usage: /etc/init.d/socketcand {start|stop|restart|force-reload}”
exit 1
;;
esac
exit 0
start-stop-daemon守护进程启停工具命令
参数
-S | --start – <argument> 开启一个系统守护程序,并传递参数给它
-K | --stop 停止一个程序
-q | --quiet 不要输出警告
-b | --background 后台运行
-p | --pidfile <pid-file> 要检查的pid文件
-a | --startas 要启动的程序(默认为<executable>)
-m| --make-pidfile 当命令本身不创建pidfile时,由start-stop-daemon创建
-x | --exec <executable> 程序启动/检查它是否正在运行
-o | --oknodo 如果未执行任何操作,退出状态为0(不是1)
示例:
Start the food daemon, unless one is already running (a process named food, running as user food, with pid in food.pid)
启动food守护进程,除非它已经在运行(一个名为food的进程,以用户food的身份运行,在foo.pid中使用pid):
start-stop-daemon --start --oknodo --user food --name food --pidfile /var/run/food.pid --startas /usr/sbin/food --chuid food -- --daemon
- 1