关于CentOS 7(Linux)下 软件|脚本 的自启动

这里介绍了三种方法,原理是网络上常见的方法,前面两种方法运用的是修改/etc/rc.local这个方法和将脚本放入/etc/rc.d/init.d的这个方法。但是按照步骤操作的时候却一直有意向不到的问题出现,中间有一些坑或者小细节网上没有详细记录到,所以这里记录一下我自己对于这些问题踩的坑。

方法一:修改rc.local实现自启动

(首先保证你在脚本目录下脚本可以正常运行,也就是脚本没问题)
1.自写脚本myscript中加入PROC_PATH,PROC_PATH=“当前应用程序的文件位置”,并且在start()中写入cd $PROC_PATH(路径不要出现中文)

进入服务所在目录

因为rc.local是存在于etc目录下的,而你所需要启动的程序不在etc目录下,或者说不在开机执行的命令行的那个目录下。在脚本目录或者脚本根目录下运行脚本是没有问题的。但是直接在桌面打开命令终端(此时不在任何目录下,或者在其他目录下),执行 /home/test/applicationFolder/myScript.sh start(/脚本目录/脚本 start)的指令,会出现有segment fault 段错误的问题。所以建议在脚本中加入先进入脚本目录的命令。(或者用sed获取pwd的路径并将其拷贝到rc.local下用个变量代替路径)
在这里插入图片描述
2.找到 /etc/rc.local,(vim /ect/rc.local)在最下面加入执行脚本的命令:
如:/home/test/applicationFolder/myScript.sh start
**注意写完rc.local要关闭rc.local的文件以及其终端,否则当你是普通用户时使用shutdown和reboot指令会出现a stop job is running for rc.local not limit的问题,想要此问题永远不会出现就需要在/sbin中去修改shutdown 和 reboot文件的权限:

chmod 4755 /sbin/shutdown
chmod 4755 /sbin/reboot
visudo
xxxx localhost= NOPASSWD: /sbin/shutdown

(这里尝试过修改Defaultstoptimeout的方法无效)**
在这里插入图片描述
3.分别给脚本以及rc.local加上权限:
如:

chmod +x /home/test/applicationFolder/myScript.sh
chmod +x /etc/rc.local

4.重启即可生效

shutdown -r now 

重启后可以用
ps -ef|grep -i "application" 或者 top
来查看程序是否启动

方法二:将脚本放入/etc/rc.d/init.d

1.在自写脚本myScript的#!/bin/sh下面加入#chkconfig:2345 80 90(这里是设置启动权限和关闭权限)和#description:script for application(描述根据自己的程序写,只要有描述即可),并且自写脚本中加入PROC_PATH,PROC_PATH=“当前应用程序的文件位置”,并且在start()中写入cd $PROC_PATH
在这里插入图片描述
2.将该脚本复制或者移动到/etc/rc.d/init.d中

cp /home/test/applicationFolder/myScript /etc/rc.d/init.d

3.并且进入该文件夹之后,给自写脚本myScript加权限:

cd /etc/rc.d/init.d
chmod +x ./myScript.sh

4.将该脚本加入自启动项中:

chkconfig --add ./myScript.sh
chkconfig myScript on

如果在第一步那里前面没有加入#chkconfig:2345 80 90 和#description
在这里会报service myScript.sh does not support chkconfig的错误
执行后这时候你可以使用命令 ntsysv 来查看是否生效
在这里插入图片描述
前面有个*号正面第四步的操作是正确的,按tab来操作ok和cancel
5.重启即可生效

shutdown -r now 

重启后可以用
ps -ef|grep -i "application"或者top来查看程序是否启动

第三个方法:写一个关于程序自启动的服务放到/usr/lib/systemd/system中,但是原理是一样的,这里不做赘述。

这里最后讲一个我在操作中一些比较搞笑和天马行空的想法:

因为中间几天把方法都试遍了发现还是执行不起来,想着那我直接找一些开机会启动的脚本,比如init.d里面的网络 network,在这个脚本里面加入启动我程序的脚本行,那网络起来了我这个也起来了。哈哈结果还是不行。就是开头第一步的原因没有进入相应的目录进行操作。

纯手打希望大家给个鼓励,若有错误希望大神指出!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值