精华内容
下载资源
问答
  • linux开机自动启动脚本

    千次阅读 2016-02-25 20:44:01
    linux开机自启动脚本

    前言

    linux有自己一套完整的启动 体系,抓住了linux启动 的脉络,linux的启动 过程将不再神秘。
    阅读之前建议先看一下附图。
    本文中假设inittab中设置的init tree为:

    • /etc/rc.d/rc0.d
    • /etc/rc.d/rc1.d
    • /etc/rc.d/rc2.d
    • /etc/rc.d/rc3.d
    • /etc/rc.d/rc4.d
    • /etc/rc.d/rc5.d
    • /etc/rc.d/rc6.d
    • /etc/rc.d/init.d

    目录

    1. 关于linux的启动
    2. 关于rc.d
    3. 启动 脚本 示例
    4. 关于rc.local
    5. 关于bash启动 脚本
    6. 关于开机程序的自动启动

    1 关于linux的启动

    init是所有进程之父
    init读取/etc/inittab,执行rc.sysinit脚本
    (注意文件名是不一定的,有些unix甚至会将语句直接写在inittab中)
    rc.sysinit脚本 作了很多工作:

    init $PATH
    config network
    start swap function
    set hostname
    check root file system, repair if needed
    check root space
    ….

    rc.sysinit根据inittab执行rc?.d脚本
    linux是多用户系统,getty是多用户与单用户的分水岭
    在getty之前运行的是系统脚本

    2 关于rc.d

    所有启动 脚本 放置在 /etc/rc.d/init.d下
    rc?.d中放置的是init.d中脚本 的链接,命名格式是:
    S{number}{name}
    K{number}{name}
    S开始的文件向脚本 传递start参数
    K开始的文件向脚本 传递stop参数
    number决定执行的顺序

    3 启动 脚本 示例

    这是一个用来启动 httpd的 /etc/rc.d/init.d/apache 脚本 :

    #!/bin/bash
    
    source /etc/sysconfig/rc
    source $rc_functions
    
    case "$1" in
    start)
    echo "Starting Apache daemon..."
    /usr/local/apache2/bin/apachectl -k start
    evaluate_retval
    ;;
    
    stop)
    echo "Stopping Apache daemon..."
    /usr/local/apache2/bin/apachectl -k stop
    evaluate_retval
    ;;
    
    restart)
    echo "Restarting Apache daemon..."
    /usr/local/apache2/bin/apachectl -k restart
    evaluate_retval
    ;;
    
    status)
    statusproc /usr/local/apache2/bin/httpd
    ;;
    
    *)
    echo "Usage: $0 {start|stop|restart|status}"
    exit 1
    ;;
    esac

    可以看出他接受start,stop,restart,status参数

    然后可以这样建立rc?.d的链接:

    cd /etc/rc.d/init.d &&
    ln -sf ../init.d/apache ../rc0.d/K28apache &&
    ln -sf ../init.d/apache ../rc1.d/K28apache &&
    ln -sf ../init.d/apache ../rc2.d/K28apache &&
    ln -sf ../init.d/apache ../rc3.d/S32apache &&
    ln -sf ../init.d/apache ../rc4.d/S32apache &&
    ln -sf ../init.d/apache ../rc5.d/S32apache &&
    ln -sf ../init.d/apache ../rc6.d/K28apache

    4 关于rc.local

    经常使用的 rc.local 则完全是习惯问题,不是标准。
    各个发行版有不同的实现方法,可以这样实现:

    touch /etc/rc.d/rc.local
    chmod +x /etc/rc.d/rc.local
    ln -sf /etc/rc.d/rc.local /etc/rc.d/rc1.d/S999rc.local &&
    ln -sf /etc/rc.d/rc.local /etc/rc.d/rc2.d/S999rc.local &&
    ln -sf /etc/rc.d/rc.local /etc/rc.d/rc3.d/S999rc.local &&
    ln -sf /etc/rc.d/rc.local /etc/rc.d/rc4.d/S999rc.local &&
    ln -sf /etc/rc.d/rc.local /etc/rc.d/rc5.d/S999rc.local &&
    ln -sf /etc/rc.d/rc.local /etc/rc.d/rc6.d/S999rc.local

    5 关于bash启动 脚本

    /etc/profile 
    /etc/bashrc
    ~/.bash_profile
    ~/.bashrc

    是bash的启动 脚本
    一般用来设置单用户的启动 环境,也可以实现开机单用户的程序,但要明确他们都是属于bash范畴而不是系统范畴。
    他们的具体作用介绍如下:
    /bin/bash这个命令解释程序(后面简称shell)使用了一系列启动 文件来建立一个运行环境:

    /etc/profile 
    /etc/bashrc
    ~/.bash_profile
    ~/.bashrc
    ~/.bash_logout 

    每一个文件都有特殊的功用并对登陆和交互环境有不同的影响。
    /etc/profile 和 ~/.bash_profile 是在启动 一个交互登陆shell的时候 被调用。
    /etc/bashrc 和 ~/.bashrc 是在一个交互的非登陆shell启动 的时候 被调用。
    ~/.bash_logout 在用户注销登陆的时候 被读取
    一 个交互的登陆shell会在 /bin/login 成功登陆之后运行。一个交互的非登陆shell是通过命令行来运行的,如[prompt]$/bin/bash。一般一个非交互的shell出现在运行 shell脚本 的时候 。之所以叫非交互的shell,是因为它不在命令行上等待输入而只是执行脚本 程序。

    6 关于开机程序的自动启动

    系统脚本 可以放置在/etc/rc.d/init.d中并建立/etc/rc.d/rc?.d链接,也可以直接放置在/etc/rc.d/rc.local中。
    init.d脚本 包含完整的start,stop,status,reload等参数,是标准做法,推荐使用。
    为特定用户使用的程序(如有的用户需要使用中文输入法而有的不需要)放置在~/中的bash启动 脚本 中。

    展开全文
  • linux 添加开机自启动脚本

    万次阅读 热门讨论 2017-02-04 18:22:45
    Linux设置服务开机自动启动的方式有好多种,这里介绍一下通过chkconfig命令添加脚本为开机自动启动的方法: 1. 编写脚本autostart.sh 2. 将写好的autostart.sh脚本移动到/etc/rc.d/init.d/目录下 3. 给脚本赋可执行...

    Linux设置服务开机自动启动的方式有好多种,这里介绍一下通过chkconfig命令添加脚本为开机自动启动的方法。

    1. 编写脚本autostart.sh(这里以开机启动redis服务为例),脚本内容如下:

    #!/bin/sh
    #chkconfig: 2345 80 90
    #description:开机自动启动的脚本程序
    
    # 开启redis服务 端口为6379
    /usr/local/service/redis-2.8.3/src/redis-server --port 6379 &
    
    

    脚本第一行 “#!/bin/sh” 告诉系统使用的shell;
    脚本第二行 “#chkconfig: 2345 80 90” 表示在2/3/4/5运行级别启动,启动序号(S80),关闭序号(K90);
    脚本第三行 表示的是服务的描述信息

    注意: 第二行和第三行必写,负责会出现如“服务 autostart.sh 不支持 chkconfig”这样的错误。

    2. 将写好的autostart.sh脚本移动到/etc/rc.d/init.d/目录下

    3. 给脚本赋可执行权限

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

    4. 添加脚本到开机自动启动项目中

    chkconfig --add autostart.sh
    chkconfig autostart.sh on
    

    到这里就设置完成了,我们只需要重启一下我们的服务器,就能看到我们配置的redis服务已经可以开机自动启动了。

    展开全文
  • linux 看门狗及自启动脚本 定时启动程序自启动脚本: “Syntax error: “(” unexpected”的解决方法 sudo dpkg-reconfigure dash 在选择项中选No,搞定了! ./watchdog.sh
  • 文章目录:1 通过系统界面设置开机自动运行程序1.1 windows系统设置开机自动运行命令1.2 Linux开机设置开机自动运行命令2 Linux中设置开机自启动python脚本程序2.1 方法一:在`/etc/rc.local`中添加要运行的脚本命令...

    想要做到某个程序在开机的时候自动启动,就要知道系统中哪些程序或者配置文件,是每次开机都是要先运行一遍的,我们只需要想办法把程序运行的命令放到指定的位置,就可以伴随着开机后自动运行!

    1 通过系统界面设置开机自动运行程序

    1.1 windows系统设置开机自动运行命令

    在windows系统中,可以通过任务计划程序,把需要运行的程序命令,或者要运行的应用程序添加到一个任务中,这样在每次开机或指定的时间就可以运行该程序,具体请参考这篇博客

    1.2 Linux开机设置开机自动运行命令

    当然linux上也有可视化的界面,设置每次开机自动启动的应用或程序!

    1、这是我的Mint系统(Ubuntu系统改造后的系统)中设置界面中的开机自启动程序
    在这里插入图片描述

    2、然后选择自定义命令

    在这里插入图片描述

    3、然后把你要运行的命令或者程序填写进入即可(当然你也可以写成一个bash脚本)然后在bash脚本中定义要运行的程序!
    在这里插入图片描述

    注意:

    Jetson NanoJetson Xavier NX中并没有该设置界面,其他的嵌入式设备我也没有尝试,如果你设备也没有类似的设置界面,那就继续往下看吧!

    2 Linux中设置开机自启动python脚本程序

    先说明,我要开机运行如下的程序,让每次程序开机后就自动播放一段视频,我脚本程序的路径为:/home/zhihui/test_boot_up.py

    python3 test_boot_up.py

    在这里插入图片描述

    注意:

    • 下面的所有linux开机自启动python程序的方法,我最终都是在Jetson nano上测试的!!!

    2.1 方法一:在/etc/rc.local中添加要运行的脚本命令

    1、用vim打开/etc/rc.local文件

    sudo vim /etc /rc.local

    2、在/etc/rc.local文件中添加你要运行的命令

    #!/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.
    
    /usr/bin/python3 /home/zhihui/test_boot_up.py &
    exit 0
    

    注意:

    • 自启动的脚本命令要放到exit 0之前
    • &:表示让命令在后台运行,不在命令行显示,当然你不加&也是可以的
    • 我的/etc目录下并没有rc.local文件,而且我尝试这种方法在Jetson nano上是没有成功的,大家可以自行尝试

    2.2 方法二:在/etc/profile中添加要运行的脚本

    2.2.1 在/etc/profile中添加要运行的脚本

    1、先创建一个脚本文件:/home/zhihui/start.sh

    vim ~/start.sh

    当然,这个文件你可以放在任意的位置,记住start.sh文件的路径即可!

    2、在 start.sh文件中添加要开机自启动的脚本命令

    #!/bin/bash
    sudo python3  /home/zhihui/test_boot_up.py
    

    3、给start.sh文件加上可执行权限

    sudo chmod +x /home/zhihui/test_boot_up.py

    4、把/home/zhihui/start.sh添加到/etc/profile文件的末尾

    sudo vim /etc/profile

    然后把/home/zhihui/start.sh添加到配置文件的末尾

    5、重新启动,看看程序有没有自动启动

    sudo reboot

    注意:

    • 我用这种方法可以成功自启动程序,但是有点小问题,每次打开后视频是在播放,但是界面不能够操作
    • 还有,这种方法你需要管理员权限

    2.2.2 知识拓展

    1、登录shell之后启会被运行的配置文件

    登录shell时,linux会按一定规则读取启动几个配置文件:

    /ect/profile
    
    $HOME/.bash_profile
    
    $HOME/.bashrc
    
    $HOME/.bash_login
    
    $HOME/.profile
    

    其中 /ect/profile文件是系统默认主启动文件,系统上每个用户登录时都会执行

    • 1)命令行登录和ssh登录,shell会按照以下顺序,运行第一个被找到的文件,余下的会被忽略:
    $HOME/.bash_profile
    
    $HOME/.bash_login
    
    $HOME/.profile
    

    上面没有 $HOME/.bashrc ,因为该文件一般通过其他文件运行。

    • 2)图形界面登录,只加载/ect/profile$HOME/.profile,其他的会被忽略。

    对于no-login shell,即图形界面打开的shell,只会读入$HOME/.bashrc文件,不会检查/etc/.profile等其他登录shell文件。

    2、开机自动启动的服务程序

    linux随机启动的服务程序都在/etc/init.d这个文件夹里,里面的文件全部都是脚本文件:

    在这里插入图片描述

    另外在/etc这个文件夹里还有诸如名为rc1.d, rc2.d一直到rc6.d文件夹,这些都是linux不同的runlevel,我们一般进入的X windows多用户的运行级别是第5级,也就是rc5.d,在这个文件夹下的脚本文件就是运行第5级时要随机启动的服务程序。需要注意的是,在每个rc (1-6).d文件夹下的文件其实都是/etc/init.d文件夹下的文件的一个软连接,也就是说,在 /etc/init.d文件夹下是全部的服务程序,而每个rc(1-6).d只链接它自己启动需要的相应的服务程序! 还 需要注意的一点是,在rc5.d里,每个链接的名字都是以S或者K开头的,S开头的表示是系统启动是要随机启动的,K开头的是不随机启动的。这 样,你就可以知道,如果我要哪个服务随机启动,就把它名字第一个字母K改成S就可以了,当然,把S改成K后,这个服务就不能随机启动了。Ubuntu系统运行级别: 0 系统停机状态 1 单用户或系统维护状态 2~5 多用户状态 。

    在这里插入图片描述

    2.3 方法三:添加到桌面自动启动程序中

    1、创建文件:~/.config/autostart/MyScript.desktop

    注意:

    如果没有autosart目录就先创建一个目录

    2、然后把要开机运行的命令添加到~/.config/autostart/MyScript.desktopExec中即可,如下:

    [Desktop Entry]
    Encoding=UTF-8
    Name=MyScript
    Comment=MyScript
    Icon=gnome-info
    Exec=python3 /home/zhihui/test_boot_up.py
    Terminal=false
    Type=Application
    Categories=
    
    X-GNOME-Autostart-enabled=true
    X-GNOME-Autostart-Delay=0
    

    3、然后重启一下,看看是否会自动启动程序

    sudo reboot

    • 推荐使用这种方法
    • 我使用这种方法可以成功运行程序!

    2.3 方法四:使用crontab命令

    是用crontab -e命令,打开配置文件,然后在配置文件中加入要运行的命令:

    @reboot python3 /home/zhihui/test_boot_up.py

    也可以加上睡眠时间:

    @reboot (sleep 30; python3 /home/zhihui/test_boot_up.py)

    参考:https://www.jianshu.com/p/06b140e598e3
    参考:https://blog.csdn.net/qq_29113041/article/details/78675396
    参考:https://www.xz577.com/j/24992.html
    参考:https://stackoverflow.com/questions/24518522/run-python-script-at-startup-in-ubuntu
    参考:https://raspberrypi.stackexchange.com/questions/4123/running-a-python-script-at-startup

    欢迎大家关注笔者,你的关注是我持续更博的最大动力


    原创文章,转载告知,盗版必究

    微信:suihailiang0816
    QQ:931762054
    wx公众号:仰望星空的小随
    展开全文
  • Linux 开机自启动多个脚本程序

    千次阅读 2020-03-02 17:14:48
    Linux 开机自启动程序

    本篇文章讲解Linux 开机自启动程序

      Linux开机自启动在项目中应用很常见,突然停电或者故障,程序总归要关掉的,如果手动去启动程序,比较麻烦,所以开机自启动是非常重要的一环。

      在Debian或者Ubuntu中,开机之后会调用一个脚本文件:/etc/rc.local,所以在这个文件中写好要启动的程序即可。Debian linux发行版系统现在可能没有rc.local文件了,不过没有关系,直接在/etc文件下新建一个rc.local文件即可,开机就会运行该程序。

      所以只要在该文件中直接启动你的程序即可,或者也可以启动一个脚本文件(.sh),在这个脚本文件中启动要启动的程序,下面就是rc.local文件内容的实例。

    	#!/bin/bash -e
    	location="/home/debian"     #脚本路径
    	cd $location
    	$location/rc.sh
    	$location/run.sh
        exit 0
    

      上面的rc.local文件中就另行启动了脚本文件(rc.sh)来运行自己的程序,以下就是rc.sh的内容,启动gateway程序。

    #!/bin/sh
    location=/home/debian/gateway20191211
    echo $location
    cd $location
    
    find $location/log -mtime +7 -type f |xargs rm -f
    out=$(date "+%Y-%m-%d")".txt"
    pwd
    $location/gateway >> $location/log/$out
    

      细心的朋友可能还发现其实上面rc.local运行了两个脚本,但是实际运行过程中只启动了第一个,这是因为第一个程序运行还没有结束,就不会运行第二个程序,所以这样基本上就不会个程序同时启动。

      如果要同时启动两个程序,则需要这样来写脚本文件,将两个脚本文件相与

    #!/bin/bash -e
    location="/home/debian"         #脚本路径
    cd $location
    $location/run.sh & $location/GetPID.sh
    exit 0
    

      此外如果还需要设计一个进程看门狗,监控该程序是否运行,则可以这样来写脚本:(先获取进程PID,然后再监控该PID是否存在)

    #!/bin/bash
    
    while true
    do
    
    process=gateway               #监控的程序运行名
    
    pid=$(ps -ef|grep $process |grep '/home/debian' | grep -v grep |awk '{print $2}')
    echo $pid
    
    if [ $pid -ne 0 ]
    then                 #如果程序PID在,则程序在运行
            echo `date`
            echo “pid is exitable!else                #否则程序没有运行,需要启动程序    启动的程序在run.sh文中。
            echo `date`
            echo "pid isnot exitable!"
            sudo sh run.sh >> $(date "+%Y-%m-%d")".txt"
    fi
    
    sleep 15s
    
    done
    
    exit 0
    

    该脚本一开机就运行,监控程序PID,如果发现没有,立即启动,15s检查一次。

    展开全文
  • Linux开机自启动脚本的总结

    千次阅读 2017-08-04 16:35:39
    一、在/etc/rc.local中添加如果不想将脚本粘来粘去,或创建链接什么的,... 再在/etc/rc.local的末尾添加一行以绝对路径启动脚本的行; 如:$ vim /etc/rc.local #!/bin/sh # # This script will be executed *after* al
  • #service servicename status是当前状态 #chkconfig --list servicename是查看启动状态,也就是是否开机自动启动 <br /> 首先写好脚本,如 mysql,把它放到 /etc/init.d 下,修改属性: $ ...
  • linux添加开机自启动脚本示例详解

    万次阅读 2017-02-17 18:19:47
    linux开机启动的顺序及添加开机自启动脚本的方法
  • 虽然写起动shell的频率非常不高。。。但是每次要写都要对付一大堆的jar文件路径,新加jar包也必须要修改起...即可以作为开机自启动service脚本被调用, #也可以作为启动java程序的独立脚本来使用。 # #Author: tudaxia.
  • linux 开机自动启动脚本方法

    千次阅读 2009-01-02 14:43:00
    1)redhat的启动方式和执行次序是: 加载内核 执行init程序 /etc/rc.d/rc.sysinit # 由init执行的第一个脚本 /etc/rc.d/rc $RUNLEVEL # $RUNLEVEL为缺省的运行模式 /etc/rc.d/rc.local #相应级别服务启动之后...
  • linux嵌入式开发板,设置系统自动登录和自动运行脚本程序,下面一一进行说明。 一、系统自动登录   1.1、在实验板添加logintest脚本 logintest脚本位置:/home/root/ //个人看自己放置位置 logintest内容: ...
  • 即可以作为开机自启动service脚本被调用, #也可以作为启动java程序的独立脚本来使用。 # #Author: tudaxia.com, Date: 2011/6/7 # #警告!!!:该脚本stop部分使用系统kill命令来强制终止指定的j
  • systemd(systemctl)编程Linux开机自启动服务脚本的方法(教程) 过去Linux采用的是init.d的服务启动管理方式, 新版的Linux采用systemd服务启动管理方式, 请看教程讲解
  • 我们在服务器上开发时,经常需要将某个程序开机就自启动,比如说系统的mysql服务就是开机自启动的。那么我们如何能够让自己的程序开机自启动呢?   2.实现步骤 1. 写好执行脚本,比如我在当前Desktop上写了个...
  • linux自定义开机启动脚本

    万次阅读 多人点赞 2018-11-29 19:06:35
    使用IDEA生成的linux系统可执行程序.sh文件,手动启动没有问题,开机自启动踩了不少坑,网上提供的三种方法都不适合, 有一种方法是在/etc/rc.local文件中加上启动脚本的命令,我加上之后,出现如下错误 我猜...
  • linux 程序自动启动

    千次阅读 2007-08-27 09:18:00
    在Red Hat Linux中自动运行程序1.开机启动时自动运行程序 Linux加载后, 它将初始化硬件和设备驱动, 然后运行第....d 目录下的脚本文件,可以使init自动启动其它程序。例如:编辑 /etc/rc.d/rc.local 文件,在文件最末
  • linux实现开机自启动脚本

    千次阅读 2016-12-30 14:40:23
    Linux下(以RedHat为范本)添加开机自启动脚本有两种方法,先来简单的; 一、在/etc/rc.local中添加 如果不想将脚本粘来粘去,或创建链接什么的, 则: step1. 先修改好脚本,使其所有模块都能在任意目录启动时正常...
  • 系统启动流程 BIOS (Basic Input Output System) MBR GRUB 加载内核kernel 运行 init 运行级别 runlevel 加载开机启动程序 配置自启动服务 自启动脚本
  • Linux系统启动加载程序 最近完成了项目,来个开机启运行。 找到已编译好的程序(以下是我编译的house) $ ls -l|grep house -rwxr-xr-x 1 pi pi 31104 Mar 26 16:11 house 输出程序所在路径 $ pwd /home/pi/...
  • linux 自己编写脚本,开机自动启动

    千次阅读 2014-02-22 16:18:23
    这个时候,我们可以自己手动写一个启动脚本,并且添加到开机自动启动项目里面。这样子每次开机就可以自动启动我们想要启动的服务。而且因为是自己写的启动脚本,可以自己灵活地添加一些 命令,比如打印启动日志等等...
  • Linux设置服务开机自动启动的方式有好多种,这里介绍一下通过chkconfig命令添加脚本为开机自动启动的方法。1. 编写脚本luzy.sh,脚本内容如下:#!/bin/sh #chkconfig: 35 80 90 #description:开机自动启动脚本...
  • 自启动脚本

    2018-10-25 17:22:52
    脚本是检测另外一个程序是否正在运行,如果没有运行则启动程序,该脚本运行在linux下,是一个死循环程序
  • Linux RedHat下添加自启动脚本的几种方式 在配置自启动脚本之前我们需要知道Linux系统启动的过程 其中启动的前三步BIOS自检,启动GRUB/LILO,加载内核,与本文无关,略过…… 一、执行init进程 init进程是系统所有...
  • linux程序启动/重启/停止脚本
  • linux开机启动脚本

    千次阅读 2018-09-17 16:23:06
    来一种linux简单使用的开机启动脚本: 1. cd /etc/rc.d/init.d/ 来到这个目录下 2.vi aa.sh 创建一个脚本文件 比如我的脚本文件是 aa.sh 3.编辑脚本文件: #!/bin/sh #chkconfig: 2345 80 90 #...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 211,898
精华内容 84,759
关键字:

linux程序自启动脚本

linux 订阅