linux 服务怎么启动_linux 开机启动服务时间过长导致后续服务启动报错 - CSDN
  • 通过查资料发现linux启动服务是用SERVICE +COMMAND。这里的command命令本身也是一个脚本。比如说:service networking start;中networking就是一个shell脚本。注意:这里的脚本没有文件后缀.sh。 接下来,将介绍...

    近期由于做嵌入式项目需要,要求将编写的程序在板载系统开机时自启动。这里做个笔记,备忘。

    1 概念

    通过查资料发现linux启动服务是用SERVICE +COMMAND。这里的command命令本身也是一个脚本。比如说:service networking start;中networking就是一个shell脚本。注意:这里的脚本没有文件后缀.sh。

    接下来,将介绍如何做一个属于自己的service命令。

    首先可以了解一下service这个命令的原理。这里我就偷一下懒,你们自己去问度娘或找一下“man”(在终端上man service下)。

    接下来我简单说下service的运行过程。以networking为例:service networking start。

    首先,sevice 会去/etc/init.d下寻找networking脚本,start是networking脚本里的一个参数(你可以去查看networking这个脚本支持的参数),然后告诉系统运行networking这个脚本,剩下的事情就交给networking脚本去坐了,事实就是这么简单。

    至此,你们应该知道如何添加一个service命令了吧。

    编写一个脚本,然后把它放在/etc/init.d这个目录下,再用service + 脚本名字 运行即可。如果是要开机自动启动那就得用chkconfig命令了。


    注意:
    A、service这个命令往往是即时生效,不用开关机,但是重启后服务会回到默认状态。

    B、chkconfig是用于把服务加到开机自动启动列表里,只要启动它,就能自动启动,重启后永久生效即:

    chkconfig --add COMMAND 
    
    chkconfig COMMAND on/off    重启后永久生效

    如果你们的机器不支持chkconfig命令,下面提供另一种开机自动启动系统服务的方法。

    首先确保脚本已在/etc/init.d/目录下,然后用:

    update-rc.d xxx defaults NN

    命令(NN为启动顺序),将脚本添加到初始化执行的队列中去。

    注意如果脚本需要用到网络,则NN需设置一个比较大的数字,如99。

     

    另外一种是

    (1) 将脚本设为可执行
    (2) 在rcN.d下执行

    sudo ln ../init.d/script-name S99script

     

    2 实例

    接下来我带大家做一下试验,帮助大家更好的理解如何在Linux中利用Service命令添加系统服务

    2.1 首先编写demo程序:hello.c

    #include <stdio.h>
    
    main()
    {
    	FILE *fp;
    	char a[] = "Hello world!"; 
    	fp=fopen("hhh.txt","a+"); 
    	fputs(a,fp);
    	return 0;
    }

    2.2 编译hello.c

    gcc -g hello.c -o hello

    2.3 在/etc/init.d目录下添加脚本test

    #!/bin/bash
    
    start()
    {
    	echo "------------------test----------------"
    	cd /home/xxx/test/
    	./hello
    }
    
    case $1 in
    	start):
    	start
    	;;
    	stop):
    	echo "-----------------stop------------------"
    	;;
    esac
    
    exit 0

    2.4 设置权限

    chmod 755 /etc/init.d/test

    2.5 利用service启动hello

    service test start

    2.6 设置开机自动启动

    chkconfig --add test 
    chkconfig test on/off    //重启后永久生效

    如果2.6不起作用,按2.7提供的方法执行

    2.7 通过update-rc.d 命名设置开机自启动

    cd /etc/init.d
    sudo update-rc.d test defaults 95

     注:其中数字95是脚本启动的顺序号,按照自己的需要相应修改即可。在你有多个启动脚本,而它们之间又有先后启动的依赖关系时你就知道这个数字的具体作用了。该命令的输出信息参考如下:

    update-rc.d: warning: /etc/init.d/test missing LSB information
    update-rc.d: see <http://wiki.debian.org/LSBInitScripts>
    Adding system startup for /etc/init.d/test ...
    /etc/rc0.d/K95test -> ../init.d/test
    /etc/rc1.d/K95test -> ../init.d/test
    /etc/rc6.d/K95test -> ../init.d/test
    /etc/rc2.d/S95test -> ../init.d/test
    /etc/rc3.d/S95test -> ../init.d/test
    /etc/rc4.d/S95test -> ../init.d/test
    /etc/rc5.d/S95test -> ../init.d/test

    卸载启动脚本的方法:

    cd /etc/init.d
    sudo update-rc.d -f test remove

    命令输出的信息参考如下:

     

    Removing any system startup links for /etc/init.d/test ...
    /etc/rc0.d/K95test
    /etc/rc1.d/K95test
    /etc/rc2.d/S95test
    /etc/rc3.d/S95test
    /etc/rc4.d/S95test
    /etc/rc5.d/S95test
    /etc/rc6.d/K95test

    3 Ubuntu设置开机启动脚本的方法

    如果2.7提供的方法不行,这里提供另一种方法。

    3.1 /etc/rc.local脚本

    rc.local脚本是一个ubuntu开机后会自动执行的脚本,我们可以在该脚本内添加命令行指令。该脚本位于/etc/路径下,需要root权限才能修改。

    该脚本具体格式如下:

    #!/bin/sh -e
    #
    # rc.local
    #
    # This script is executed at the end of each multiuser runlevel.
    # Make sure that the script will "exit 0" on success or any other
    # value on error.
    #
    # In order to enable or disable this script just change the execution
    # bits.
    #
    # By default this script does nothing.
      
    exit 0

    注意: 

    一定要将命令添加在 exit 0之前,即在第13行添加;

    命令即为脚本文件所在的绝对路径,如在第13行添加 /usr/local/bin/test;

    如果脚本中有死循环,需要在该脚本路径后加上 & ,让其后台执行;

    一定要给脚本文件赋可执行权限。

    sudo chmod 777 test 

    或者在 /etc/init.d/rc.local 中在最后加上脚本的绝对路径也可以开机自启动。

    3.2 使用 ln -s 建立软连接启动

    Ubuntu还可以通过 在 /etc/rc.d/rc*.d 目录中建立 /etc/init.d/ 服务的软链接 的方式,实现程序开启自启动。

    具体方法见 《 Ubuntu中利用 sysv-rc-conf 设置开机自启动 》中的 Linux 使用 ln -s 建立软连接启动。

     

    另外还有一点要说的就是,脚本test在后台执行后,我尝试使用

    ps -ef | grep test | grep -v grep

    去查看脚本test的进程以确定它是否被执行,但是查不到。后来一想,可能是shell执行了该脚本,所以无法查到该脚本的进程。

    展开全文
  • linux服务启动脚本实践 后台开发在部署、修改配置、升级服务时,需经常进行启动、关闭等操作 常规的做法: - 启动: 敲一行执行启动命令, - 关闭: 执行ps aux | grep xxx,查到进程号,在执行 kill -9 xxx...

    linux服务启动脚本实践

    后台开发在部署、修改配置、升级服务时,需经常进行启动、关闭等操作
    常规的做法:
    - 启动: 敲一行执行启动命令,
    - 关闭: 执行ps aux | grep xxx,查到进程号,在执行 kill -9 xxx
    - 修改配置文件后又得先关闭,在启动

    无数次的重复非常繁琐,故写个shell脚本解放双手还是很有必要的。
    本文是做项目中写的一个小脚本,简单实用,特此总结一下。

    目标

    需支持
    - usage
    - start
    - stop
    - restart
    - status

    思路:

    usage

    输出 Usage: $0 { start | stop | restart | status }

    start:

    检测是否有pid文件,有则提示已经启动,无则执行启动命令,成功时将新进程号写入pid文件,
    失败时提示异常

    stop

    检测是否有pid文件,无则提示未启动,有则执行kill -9 $PID 命令,删除pid文件

    restart

    先执行stop,再执行start

    status

    检测是否有pid文件,无则提示未启动,有则提示$PID,pid文件路径,进程相关信息

    #!/bin/sh
    # $0 表shell命令第一个参数,即脚本本身
    # $(dirname $0) 定位脚本文件所在的目录
    BASE_DIR=$(dirname $0)
    # $(basename $0 .sh) 定位脚本名称,.sh表示去除.sh后缀
    PID=$(dirname $0)/$(basename $0 .sh).pid
    
    #USER=root
    
    status() {
      # -f 表判断变量是否存在
      if [ -f $PID ]
      then
        echo "--- Started, Pid file: $( cat $PID ) [$PID] ---"
        ps -ef | grep -v grep | grep $( cat $PID )
      else
        echo "---No Pid file---"
      fi
    }
    
    start() {
        if [ -f $PID ]
        then
            echo "---Already started. PID: [$( cat $PID )]---"
        else
          # 测试命令,以启动redis命令为例
          /usr/local/src/redis-server /etc/redis.conf &
    
          # $? 为上条命令执行结果,成功执行则返回0
          if [[ "$?" -eq 0 ]];
          then
            # $! 为上条shell命令的进程号,如执行成功,则将进程号写入pid文件
            echo $!>$PID
            echo "START success"
          else
            echo "---START failure, please check----"
          fi
        fi
    }
    
    stop() {
      if [ -f $PID ]
      then
        # 执行kill的几种命令方式
        # kill -9 `ps -ef | grep -v grep | grep $CMD | grep -w $USR | awk '{print $2}'`
        # echo `cat $PID` | xargs kill -9
        kill -9 `cat $PID`
        sleep 1
        /bin/rm $PID
        echo "Stop success"
      else
        echo "---No pid file---"
      fi
    }
    
    case "$1" in
      'start')
        start
        ;;
    
      'stop')
        stop
        ;;
    
      'restart')
        stop
        sleep 1
        start
        ;;
    
      'status')
        status
        ;;
    
      *)
        echo "Usage: $0 { start | stop | restart | status }"
        exit 1
        ;;
    esac
    
    exit 0
    展开全文
  • java程序作为Linux服务启动前言当作为服务启动之后,对于程序的管理更加简单方面了,通过命令行systemctl start xxx.service //启动项目systemctl stop xxx.service //停止项目systemctl restart xxx.service //重启...

    java程序作为Linux服务启动

    前言

    当作为服务启动之后,对于程序的管理更加简单方面了,通过命令行

    systemctl start xxx.service //启动项目
    
    systemctl stop xxx.service //停止项目
    
    systemctl restart xxx.service //重启项目

    而且当程序被异常关闭之后,服务会将程序自动拉起。

    第一步服务脚本编写

    [Unit]
    Description=test demo api service by java
    Documentation=https://www.xxxxx.com
    After=network.target
    
    [Service]
    User=nobody
    #Type=forking
    PIDFile=/run/testDemoAPI.pid
    ExecStart=/bin/sh -c '/usr/bin/java -jar /usr/local/src/testDemoAPI/testdemoapi.jar >> /var/log/testDemoApi.log 2>&1'
    SuccessExitStatus=143
    TimeoutStopSec=10
    Restart=on-failure
    RestartSec=5
    
    [Install]
    WantedBy=multi-user.target

    第二步将应用程序放到指定的文件路径下

    将程序jar包放到脚本中指定的路径下

    mv testdemoapi.jar /usr/local/src/testDemoAPI/

    第三步将写好的脚本放到系统服务目录下

    mv test-demo-api.service /usr/lib/systemd/system/

    第四步启动服务

    systemctl start test-demo-api.service
    //启动服务时可能会因为没有权限创建/var/log/testDemoApi.log文件报错

    使用命令行查看原因

    运行命令行:systemctl status test-demo-api.service
    
    [root@localhost system]# systemctl status test-demo-api.service
    ● base-info-api.service - base info api service by java
       Loaded: loaded (/usr/lib/systemd/system/est-demo-api.service; disabled; vendor preset: disabled)
       Active: activating (auto-restart) (Result: exit-code) since 三 2017-09-20 17:11:43 CST; 3s ago
         Docs: https://www.hocyun.com
      Process: 7496 ExecStart=/bin/sh -c /usr/bin/java -jar /usr/local/src/testDemoAPI/testdemoapi.jar >> /var/log/testDemoAPI.log 2>&1 (code=exited, status=1/FAILURE)
     Main PID: 7496 (code=exited, status=1/FAILURE)
    
    920 17:11:43 localhost.localdomain systemd[1]: Unit test-demo-api.service entered failed state.
    920 17:11:43 localhost.localdomain systemd[1]: test-demo-api.service failed.
    
    运行命令行:journalctl -xe
    
    得知:
    920 17:14:05 localhost.localdomain sh[7579]: /bin/sh: /var/log/testDemoAPI.log: 权限不够
    920 17:14:05 localhost.localdomain systemd[1]: base-info-api.service: main process exited, code=exited, status=1/FAILURE
    920 17:14:05 localhost.localdomain systemd[1]: Unit base-info-api.service entered failed state.
    920 17:14:05 localhost.localdomain systemd[1]: base-info-api.service failed.
    920 17:14:10 localhost.localdomain systemd[1]: base-info-api.service holdoff time over, scheduling restart.
    920 17:14:10 localhost.localdomain systemd[1]: Started base info api service by java.
    

    我们帮他创建好这个日志文件并且将用户权限改为nobody

    touch /var/log/testDemoAPI.log //创建文件
    
    chown nobody:nobody testDemoAPI.log//并且将文件权限改为nobody

    第五步启动项目

    systemctl start test-demo-api.service
    展开全文
  • 有两种解决办法: 1)在Tomcat环境中解决 可以通过配置JRE使用非阻塞的Entropy Source。...加入后再启动Tomcat,整个启动耗时下降到Server startup in 2912 ms。 2)在JVM环境中解决 打开


    有两种解决办法:

    1)在Tomcat环境中解决

    可以通过配置JRE使用非阻塞的Entropy Source。

    在catalina.sh中加入这么一行:-Djava.security.egd=file:/dev/./urandom 即可。

    加入后再启动Tomcat,整个启动耗时下降到Server startup in 2912 ms。

    2)在JVM环境中解决

    打开$JAVA_PATH/jre/lib/security/java.security这个文件,找到下面的内容:

    securerandom.source=file:/dev/urandom
    

    替换成

    securerandom.source=file:/dev/./urandom
    
    
    展开全文
  • linux启动服务器命令

    2015-05-15 09:23:50
    linux启动服务器命令

    1:首先确定Linux服务器是否安装了web服务器


    2:备份原有的服务器上的事项。


    3:将本地服务器(例如:tomcat)内的web项目发到Linux服务器上。(我用fz工具)


    4: 复制文件到指定目录(如果上次文件有误):
    cp -rv a b      复制a文件夹到b目录
    cp -rv a ./     如果你正在b文件夹下,则可以使用这种语句(复制a文件夹到b目录)
    cp -v  a/a.txt ./  或者   cp -v a/a.txt b/  赋值a目录下的a.txt文件到当前所处目录

    说明:cp -r参数是拷贝目录的,-v是现实拷贝过程(正在拷贝哪个文件)。


    5::解压与压缩文件(上传为压缩文件):
    把home目录下的myfile文件夹压缩为myfile.zip
    zip -r myfile.zip myfile
    把home 目录下的myfile.zip 解压到 b目录下
    unzip myfile.zip -d b
    把home 目录下的  myfile 文件夹 和 a.txt 压缩到 myfile.zip
    zip -r myfile.zip myfile a.txt


    把 home目录下的 myfile.zip 直接解压到 home目录
    unzip myfile.zip
    把 home目录下的 myfile1.zip myfile2.zip myfile12344.zip 同时解压到home 目录下
    unzip myfile/*.zip
    查看把/home目录下面的file.zip里面的内容
    unzip -v file.zip

    6:查看当前路径下的所有进程。
       ps -ef|grep java   
       当然如果你知道线程的大致名称,可以使用模糊查询,譬如:线程名称为:mythread

       ps -ef|grep myt

       
    7: 查找到当前正在运行的切实自己所要更新的项目,查找他的进程号
       ps -ef|grep zcDomain (项目名|进程名)
       
       杀死这个进程。kill -9 28694(项目进程号)


    8:重新启动这个项目 
       nohup ./startWebLogic.sh &   ( 以注册系统为例子)
    9:查看日志文件是否启动该项目
       tail -100f nohup.out
    展开全文
  • Linux启动某项服务一.踩的坑由于我在电脑上重新安装Linux虚拟机,自信的我以为用了Linux这么久,应该没有什么难度,但是从我开始重新安装Linux系统才知道这么辣鸡的我。这里我就以开启SSH自启动服务为例讲述一下:...
  • 以下基于我对文末中各种资料的理解,如有错误...比如说如果要像远程连接到linux主机,需要开启ssh服务。管理服务计算机中服务众多,ssh要开启ssh服务,使用apache要开启apache服务,不可能每次要用的时候都自己手动开启
  • linux启动tomcat服务的命令是什么 突然想不起了。只知道要启动startup.sh。但前面命令是什么 kakarlort | 浏览 37549 次 2009-06-26 09:13 2015-08-15 09:18 最佳答案 Linux下...
  • Linux系统中,系统服务启动脚本一般放在/etc/rc.d/init.d目录下。不同的开机模式,则分别对应到/etc/rc.d/rc0-6.d目录下,rc0.d –rd6.d 这七个目录存放着linux在不同运行级别init.d下脚本的启停顺序,这几个目录下...
  • linux开机启动顺序

    2019-03-05 17:02:12
    文章目录linux的开机启动顺序概述BIOS: basic input output system 基本输入输出系统MBR: master boot record 主引导记录.主引导程序总结第一个程序: init运行等级System V initialization方式Upstart方式Ubuntu自动...
  • 什么是X X是一个协议1,并不是具体的实现。... 一般称为X视窗系统协议,是一个图形结构,用于Unix和类Unix系统下的...窗口系统(Windowing system)2,是GUI的一种,Linux系统有很多窗口系统的实现:X Window System、...
  • 使用工具:SSH Secure Shell ...进入到tomcat的bin目录 cd /home/ubuntu-mb/pim/apache-tomcat-7.0.54/bin 启动tomcat sh startup.sh或者./startup.sh 关闭tomcat sh shutdown.sh 查看Tom...
  • 查看开机启动项 1:systemctl list-unit-files --type=service  2:systemctl list-unit-files --type=service | grep enabled 3:systemctl list-unit-files --type=service | grep disabled 开机停止...
  • 1. 查看Linux启动服务 chkconfig --list 查询出所有当前运行的服务 chkconfig --list atd 查询atd服务的当前状态 2.停止所有服务并且在下次系统启动时不再启动,如下所示: chkconfig --levels 12345 ...
  • 我们在服务器上开发时,经常需要将某个程序开机就自启动,比如说系统的mysql服务就是开机自启动的。那么我们如何能够让自己的程序开机自启动呢?   2.实现步骤 1. 写好执行脚本,比如我在当前Desktop上写了个...
  • 2,查看linux系统下所有的服务,使用命令:chkconfig --list 3,查看一个服务的状态,如查看ntpd服务的状态,使用命令:service ntpd status 4,停止一个服务,(系统重启后,该配置不生效)如停止ntpd...
  • Linux系统下,重启Tomcat使用命令操作的! 首先,进入Tomcat下的bin目录 cd /usr/local/tomcat/bin 使用Tomcat关闭命令 ./shutdown.sh 查看Tomcat是否以关闭 ps -ef|grep java 如果显示以下相似信息,...
  • linux开机启动smb服务

    2013-06-25 17:16:42
    修改/etc/rc.loacl文件(增加红色部分) [root@localhost ~]# cat /etc/rc.local  #!/bin/sh # # This script will be executed *after* all the other init scripts. ...# You can put your own...
  • 有时候我们需要Linux系统在开机的时候自动加载某些脚本或系统服务 主要用三种方式进行这一操作
  • Linux下设置redis使用service服务启动 方法一: 1.设置redis.conf中daemonize为yes,确保守护进程开启,也就是在后台可以运行 #vi编辑redis安装目录里面的redis.conf文件 [root@localhost /]# vi /usr/redis/redis-...
1 2 3 4 5 ... 20
收藏数 785,452
精华内容 314,180
关键字:

linux 服务怎么启动