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

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

  •  
  •   openbaby · 4 天前 · 1246 次点击
    有个小脚本 speed 是必须手动输入 nohup ./speed 才能后台运行,现在我想将它加入到 /etc/rc.local 实现开机自启,
    请问该在 /etc/rc.local 里怎么写呢?

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

    rc.local
    su - 'someuser' -c '/path/to/work/start.sh'
        9
    SharkIng   3 天前 via iPhone
    用绝对路径
        10
    allenshi   3 天前   ♥ 1
    cd /脚本所在路径
    ./speed
    cd -

    直接写在 /ect/rc.local 里面
        11
    kmahyyg   3 天前 via Android   ♥ 1
    nohup /root/run.sh >> /dev/null 2>&1 &
        12
    babytomas   3 天前   ♥ 1
    `.` 只是代表`当前`,你的 ./ 其实只是当前目录、并非`运行`命令。

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

    例如我 root 下面有 test.sh 文件,你进入 root 的时候可以 ./test.sh ,但在 rc.local 中输入 /root/test.sh 即可。
        13
    snip   3 天前   ♥ 1
    centos7 和 Ubuntu16 下面,要给 rc.local 加执行权限

    chmod 755 /etc/rc.local
        14
    megachweng   3 天前 via iPhone   ♥ 1
    估计 no such file 是因为你没写完整的目录,或者先 cd 到那个 json 目录下
        15
    ik   3 天前 via iPhone   ♥ 1
    chmod +x /home/speed
    echo '/home/speed' >> /etc/rc.local
        16
    Shintaku   3 天前   ♥ 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]里加入相应的命令
        17
    fuge   3 天前 via Android
    @Shintaku 这是正解
        18
    julyclyde   3 天前
    哈,这是 javaer 常见的问题
        19
    julyclyde   3 天前
    @Shintaku 应该 Type=Simple 而且不加&
    &这个是给 shell 做 job control 用的符号,在 systemd 里是没用的
        20
    msg7086   3 天前
    @Shintaku 我记得可以设工作目录吧?不一定要用全路径。
        21
    loveminds   2 天前
    @Shintaku
    不要滥用 rc.local 这种 UNIX 时代的历史遗留,最好做成 systemd 服务,这样至少可控可管,当然,设置某些参数那种 OneShow 的除外
        22
    pheyx   2 天前 via Android
    @Shinta 推荐在 /etc/systemd/system 建 service,而且 execstart 命令行后不用加&
        23
    Shintaku   1 天前
    @pheyx @julyclyde 确实不需要加&
    的确 /etc/systemd/system 更科学一些,忘了当初为什么放在 /lib 下了
    @msg7086 没有设置过,感觉绝对路径更不容易出错吧
    DigitalOcean
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   1965 人在线   最高记录 2466   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.7.5 · 25ms · UTC 08:39 · PVG 16:39 · LAX 01:39 · JFK 04:39
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1