V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
openbaby
V2EX  ›  Linux

请问 Linux 如何将需要./才能运行的脚本添加到/etc/rc.local 实现开机启动

  •  
  •   openbaby · 2017-04-21 14:23:10 +08:00 · 3924 次点击
    这是一个创建于 2774 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有个小脚本 speed 是必须手动输入 nohup ./speed 才能后台运行,现在我想将它加入到 /etc/rc.local 实现开机自启,
    请问该在 /etc/rc.local 里怎么写呢?

    另外,如何将这个脚本写成系统服务,实现启动重启停止呢?
    23 条回复    2017-04-23 19:45:19 +08:00
    openbaby
        1
    openbaby  
    OP
       2017-04-21 14:35:19 +08:00
    我当前的办法是在 /etc/rc.local 里写为
    nohup /root/speed &
    但是不生效
    ys0290
        2
    ys0290  
       2017-04-21 14:39:23 +08:00 via iPhone   ❤️ 1
    rc.local 里面不需要 nohup
    fengfisher2
        3
    fengfisher2  
       2017-04-21 14:41:09 +08:00
    你加 x 权限就可以了。
    chmod 755 xxx.sh
    openbaby
        4
    openbaby  
    OP
       2017-04-21 14:44:17 +08:00
    @ys0290 这个脚本运行时会调用一个 json 文件,现在提示
    Open config file failed: open ./speed.json: no such file or directory
    是不是还要给这文件什么权限才能一并开机调用起来呢?
    fengfisher2
        5
    fengfisher2  
       2017-04-21 14:44:50 +08:00   ❤️ 1
    "另外,如何将这个脚本写成系统服务,实现启动重启停止呢?"百度一下就有了。
    因为 1 ,你要在脚本里面添加选项,因为不知道你怎么写的,所以方法很多。
    2 ,也不太明白,你说的系统服务是指 /etc/init.d/下面调用脚本呢?还是加到 service 里面,还是你想直接 chkconfig 这里开机启动。
    jarlyyn
        6
    jarlyyn  
       2017-04-21 14:45:50 +08:00   ❤️ 1
    写个脚本
    cd 过去
    lianz
        7
    lianz  
       2017-04-21 15:04:43 +08:00   ❤️ 1
    cd /path/to/work
    ./start.sh
    istek999
        8
    istek999  
       2017-04-21 16:11:59 +08:00   ❤️ 1
    ./的脚本,我如果没有理解错,应该是当前用户下的脚本吧。
    两种方式:
    rc.local
    /path/to/work/start.sh

    rc.local
    su - 'someuser' -c '/path/to/work/start.sh'
    SharkIng
        9
    SharkIng  
       2017-04-21 17:35:21 +08:00 via iPhone
    用绝对路径
    allenshi
        10
    allenshi  
       2017-04-21 18:15:44 +08:00   ❤️ 1
    cd /脚本所在路径
    ./speed
    cd -

    直接写在 /ect/rc.local 里面
    kmahyyg
        11
    kmahyyg  
       2017-04-21 18:20:55 +08:00 via Android   ❤️ 1
    nohup /root/run.sh >> /dev/null 2>&1 &
    babytomas
        12
    babytomas  
       2017-04-21 18:36:51 +08:00   ❤️ 1
    `.` 只是代表`当前`,你的 ./ 其实只是当前目录、并非`运行`命令。

    你在这个文件的目录执行 `pwd` 查看当前的路径,然后把文件绝对地址加入 rc.local 即可。

    例如我 root 下面有 test.sh 文件,你进入 root 的时候可以 ./test.sh ,但在 rc.local 中输入 /root/test.sh 即可。
    snip
        13
    snip  
       2017-04-21 18:49:56 +08:00   ❤️ 1
    centos7 和 Ubuntu16 下面,要给 rc.local 加执行权限

    chmod 755 /etc/rc.local
    megachweng
        14
    megachweng  
       2017-04-21 19:12:15 +08:00 via iPhone   ❤️ 1
    估计 no such file 是因为你没写完整的目录,或者先 cd 到那个 json 目录下
    ik
        15
    ik  
       2017-04-21 19:44:35 +08:00 via iPhone   ❤️ 1
    chmod +x /home/speed
    echo '/home/speed' >> /etc/rc.local
    Shintaku
        16
    Shintaku  
       2017-04-21 21:39:24 +08:00   ❤️ 2
    新建一个`/lib/systemd/system/speed.service`的配置文件

    ```
    [Unit]
    Description=speed autostart
    [Service]
    Type=idle
    ExecStart=/usr/bin/sh /绝对路径 /speed &
    [Install]
    WantedBy=multi-user.target
    ```

    保存后执行

    sudo systemctl daemon-reload
    sudo systemctl start speed
    sudo systemctl enable speed

    停止重启可以在[Service]里加入相应的命令
    fuge
        17
    fuge  
       2017-04-22 05:58:56 +08:00 via Android
    @Shintaku 这是正解
    julyclyde
        18
    julyclyde  
       2017-04-22 07:48:30 +08:00
    哈,这是 javaer 常见的问题
    julyclyde
        19
    julyclyde  
       2017-04-22 07:49:13 +08:00
    @Shintaku 应该 Type=Simple 而且不加&
    &这个是给 shell 做 job control 用的符号,在 systemd 里是没用的
    msg7086
        20
    msg7086  
       2017-04-22 15:31:47 +08:00
    @Shintaku 我记得可以设工作目录吧?不一定要用全路径。
    loveminds
        21
    loveminds  
       2017-04-23 09:32:21 +08:00
    @Shintaku
    不要滥用 rc.local 这种 UNIX 时代的历史遗留,最好做成 systemd 服务,这样至少可控可管,当然,设置某些参数那种 OneShow 的除外
    pheyx
        22
    pheyx  
       2017-04-23 10:21:45 +08:00 via Android
    @Shinta 推荐在 /etc/systemd/system 建 service,而且 execstart 命令行后不用加&
    Shintaku
        23
    Shintaku  
       2017-04-23 19:45:19 +08:00
    @pheyx @julyclyde 确实不需要加&
    的确 /etc/systemd/system 更科学一些,忘了当初为什么放在 /lib 下了
    @msg7086 没有设置过,感觉绝对路径更不容易出错吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4736 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 01:13 · PVG 09:13 · LAX 17:13 · JFK 20:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.