Linux 系统设置用户应用程序开机自启动

参考小梅哥的教程。

我在AC540 socfpga上完成EtherCAT主站搭建之后,需要远程调试主站程序,每当AC540开机之后,都需要输入/etc/init.d/ethercat start命令启动主站,比较麻烦。我希望EtherCAT能够在系统开机后自动启动,且无需在控制台输入程序运行命令。

添加用户程序到 Linux 系 统自启动
修改 /etc/rc5.d/S90gsrd_init.sh脚本,
S90gsrd_init.sh 文件中,以 start )和 stop)标记的脚本段 内,结束符 ;; 之前插入用户希望启动的程序文件名即可。
root@socfpga:~# cat /etc/rc5.d/S90gsrd_init.sh 
#!/bin/sh

case "$1" in
  start)
        if [ "`cat /sys/class/fpga/fpga0/status`" == "user mode" ]; then
                modprobe gpio-altera
        fi

        /www/pages/cgi-bin/scroll_server &

        IP=`ifconfig eth0 | head -n 2 | tail -n 1 | sed s/inet\ addr:// | sed s/\ Bcast.*// | sed s/\ *//g`
        IP_CHECK=`echo $IP | sed 's/\(\([0-9]\{1,3\}\)\.\)\{3\}\([0-9]\{1,3\}\)//g'`
        if [ "$IP_CHECK" != "" ]; then
                IP="No IP obtained"
        fi
        printf '\e[2J' > /dev/ttyLCD0
        printf "$IP" > /dev/ttyLCD0
        printf "\n" > /dev/ttyLCD0
        printf Hello\ Tim! > /dev/ttyLCD0
        /etc/init.d/ethercat start &
        ;;
  stop)
        ID=`ps | grep scroll_server | awk '{print $1;}'`
        kill $ID
        ;;
esac

注意事项

(1)插入自己的脚本时,不要插入到以 if fi 标记的脚本内容中间。

(2)插入的程序可执行文件名使用绝对路径,不能使用相对路径。

(3)用户程序可执行文件后面插入空格之后加上一个“&”可以让程序以后 台模式运行,这样能够不影响其他程序的工作。否则系统会阻塞在这个 程序的执行位置,无法继续向下运行。

修改脚本之后,使用“:wq”命令退出脚本,使用“reboot”命令重启系统, 然后就可以测试用户程序是否执行了。

测试结果如下。

关于Linux系统的运行级别

如果用户查看 /etc 下的文件,会发现有 rc0.d~rc6.d 7 个以 rc 开 头的目录,那么我们又是如何知道,应该去修改 rc5.d 中的脚本内容 的呢?这就涉及到 Linux 系统运行接班的问题。下面针对 Linux 系统 运行级别做简单介绍。
drwxr-xr-x    2 root     root          4096 Sep 28 04:35 rc0.d
drwxr-xr-x    2 root     root          4096 Sep 28 04:35 rc1.d
drwxr-xr-x    2 root     root          4096 Sep 28 04:35 rc2.d
drwxr-xr-x    2 root     root          4096 Sep 28 04:35 rc3.d
drwxr-xr-x    2 root     root          4096 Sep 28 04:35 rc4.d
drwxr-xr-x    2 root     root          4096 Sep 28 04:35 rc5.d
drwxr-xr-x    2 root     root          4096 Sep 28 04:35 rc6.d
drwxr-xr-x    2 root     root          4096 Sep 28 04:35 rcS.d
Linux 系统的 7 个运行级别(runlevel)
运行级别 0:系统停机状态,系统默认运行级别不能设为 0,否则不能正常 启动
运行级别 1:单用户工作状态,root 权限,用于系统维护,禁止远程登陆
运行级别 2:多用户状态(没有 NFS)
运行级别 3:完全的多用户状态(有 NFS),登陆后进入控制台命令行模式
运行级别 4:系统未使用,保留
运行级别 5:X11 控制台,登陆后进入图形 GUI 模式
运行级别 6:系统正常关闭并重启,默认运行级别不能设为 6,否则不能正常启动
运行级别的原理:
在目录/etc/init.d 下有许多服务器脚本程序,一般称为服务(service) 在/etc 下有 7 个名为 rcN.d 的目录,对应系统的 7 个运行级别 rcN.d 目录下都是一些符号链接文件,这些链接文件都指向 init.d 目录下 的 service 脚本文件,命名规则为 K+nn+服务名或 S+nn+服务名,其中 nn 为两位数字。 系统会根据指定的运行级别进入对应的 rcN.d 目录,并按照文件名顺序检 索目录下的链接文件
对于以 K 开头的文件,系统将终止对应的服务
对于以 S 开头的文件,系统将启动对应的服务
查看运行级别用:runlevel
进入其它运行级别用:init N,比如运行级别 0 为关机,运行级别 6 为 重启系统,如果输入 init 0,则系统会关机,输入 init 6,则系统会重启。
了解了 Linux 系统的运行级别,我们就可以通过手动的去修改对应 启动级别里面的脚本内容,甚至自己新建一个 sh 脚本来执行更复杂 的开机启动内容了。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值