Arm Linux 新增开机自启动一个程序实例
打开开机启动文件(shell 脚本), 每个板子可能有不同的Linux内核, 故启动文件名称不一样
例如:
/etc/init.d/rcS
/etc/init.d/rc.local
/etc/profile
/usr/etc/rc.local
我的板子上是 “/etc/init.d/rcS” 这个文件名称。
一、开机自启动程序设置的两种方法
1.1 在 /etc/init.d/rcS 文件中添加需要自启动程序(方案一)
即在shell中 执行一个可执行文件, 进入到绝对路径, ./可执行文件名称 即可, 例如:
cd /apps
./hello
1.2 在 /etc/init.d/ 路径中添加一个shell脚本(方案二)
创建了init进程, init进程执行init.d解释/etc/inittab, 这个就会去执行/etc/init.d中有一个rcS的脚本, 这个脚本是for循环, 找到/etc/init.d中以S打头的至少俩个字符的脚本, 然后执行这个脚本;
二、实例演示
2.1 系统预定义启动脚本文件 /etc/init.d/rcS
[root@EPC-9600 init.d]# cat /etc/init.d/rcS
#!/bin/sh mkdir -p /var/{run,log,lock,empty,lib/dbus} 2> /dev/null # 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 "$i" ] && continue case "$i" in *.sh) # Source shell script for speed. ( trap - INT QUIT TSTP set start . $i ) ;; *) # No sh extension, so fork subprocess. $i start ;; esac done if [[ -d /opt/etc/init.d ]]; then for i in /opt/etc/init.d/S??* ;do # Ignore dangling symlinks (if any). [ ! -f "$i" ] && continue case "$i" in *.sh) # Source shell script for speed. ( trap - INT QUIT TSTP set start . $i ) ;; *) # No sh extension, so fork subprocess. $i start ;; esac done fi
2.2 用户新增启动脚本文件 /opt/etc/init.d/S80Hello
[root@EPC-9600 ~]# chmod a+x /opt/melon/bin/hello.bin
[root@EPC-9600 ~]# touch /opt/ect/init.d/S80ecpud
[root@EPC-9600 ~]# chmod a+x /opt/etc/init.d/S80ecpud
[root@EPC-9600 ~]# cat /opt/etc/init.d/S80ecpud
#!/bin/sh if [[ -x /opt/melon/bin/hello.bin ]]; then echo -n "Starting hello.bin: " /opt/melon/bin/hello.bin -l /bin/login &> /opt/melon/logs/melon.log if [[ "$?" -eq "0" ]]; then echo "OK" else echo "Failed" fi fi
三、标准输入/出、重定向与跟踪
3.1 文件句柄
句柄0:标准输入stdin,键盘输 //标准输入(standard input)文件描述符 0
句柄1:标准输出stdout //标准输出(standard output) 1
句柄2:标准错误stderr //标准错误(standard error) 2
重定向操作符 描述 > 将命令输出写入到文件或设备(如打印机),而不是命令提示符窗口或句柄。 < 从文件而不是从键盘或句柄读入命令输入。 >> 将命令输出添加到文件末尾而不删除文件中已有的信息。 >& 将一个句柄的输出写入到另一个句柄的输入中。 <& 从一个句柄读取输入并将其写入到另一个句柄输出中。 | 从一个命令中读取输出并将其写入另一个命令的输入中。也称作管道。
3.2 >覆盖和>>追加 都重定向输出
命令 > 文件 覆盖:这个输出重定向符是直接覆盖原有的内容 命令 >> 文件 追加:则是在文件末尾追加内容
3.3 完整格式
命令 1> 文件 表示的是"标准输出"重定向,其中1可以省略,> 同样表示
命令 2> 文件 表示的是"标准错误"输出重定向
命令 > 文件 2>&1 表示的是"把标准错误输出重定向到标准输出" , 符号 >& 是一个整体,不可分开,分开后就不是上述含义了。写在log文件后面
命令 > 文件 1>&2 表示的是"把标准输出重定向到标准错误输出"(注意>后面要加&才能表示输出到2通道标准错误输出通道,如果没有&,表示输出到2文件了)
文件 < 文件 这是输入重定向符,表示从<后面的地方读取输入到<前面。所以4<&0表示的是把键盘输入的东西输入到文件4中
举例-1: hello.bin 1>> log.txt 2>&1
解释:将正确和错误的信息都输入到log.txt文件中
举例-2: < 可以将原本由标准输入改为由指定地方输入,比如下面

首先创建一个hh文件,里面写入hello world
然后执行 >> txt.py < hh
就可以把hh里面的内容写入到txt.py
3.4 简写格式
&> log >& log
上面两种方式都和"命令 > 文件 2>&1" 一个语义。
上面两种方式中&>和>&有区别吗?——语义上是没有任何区别的,但是第一中方式是最佳选择,一般使用第一种
3.5 日志跟踪t显示tail
tail -f -n 10 log.txt
-f
动态输出文本内容,通俗讲就是对文件进行监控,当文本产生内容更新时,它就会直接写入标准输出,文件被删除自动停止。
-F
与-f功能相同。
差别在于,当文件被删除后,-f会停止,-F会等待。
-n
tail -n 5 log.txt // 输出文件尾部5行 tail -n +5 log.txt // 从第5行开始到文件尾部进行输出 tail -10 log.txt // 在字符'-'之后紧跟数字,默认按行数处理
浙公网安备 33010602011771号