如何让 /etc/rc.local 在启动时运行?

ped*_*roo 96 startup scripts

我有一个脚本,我想在我的系统启动时运行它并将其放入 中/etc/rc.local,但它不起作用。我怎样才能让它在启动时运行?

小智 76

你能手动运行你的脚本吗?如果没有,则是该脚本有问题,否则请多看rc.local. 如果该脚本需要作为 运行root,则 sudo必须使用 手动运行它。

  • 我试过“ls -l /etc/rc.local”并且它是可执行的,但我不能让它在启动时运行......知道吗? (4认同)

小智 60

就我而言,这些说明都不是完美的解决方案,因此请尝试以下详细说明:

  1. 使用任意名称将所有执行代码保存在单独的文本文件中,例如 foo.sh
  2. 添加#!/bin/sh为 中的第一行foo.sh,执行它sudo foo.sh以检查错误
  3. 在 中/etc/rc.local,将完整路径名放在之前foo.sh,以 , 开头: shexit 0
    sh '/path/to/your/script/foo.sh'
    
    Run Code Online (Sandbox Code Playgroud)
  4. 验证第一行/etc/rc.local#!/bin/sh -e
  5. 确保/etc/rc.local可执行:
    sudo chown root /etc/rc.local
    sudo chmod 755 /etc/rc.local
    
    Run Code Online (Sandbox Code Playgroud)
  6. 验证一切正常:
    sudo /etc/init.d/rc.local start
    
    Run Code Online (Sandbox Code Playgroud)
  7. 重启测试

  • 步骤#8 是关键,验证脚本将在启动环境下运行。就我而言,我需要提供命令的完整路径。 (7认同)
  • 在 6 和 7 中,您编写了 /etc/rc.local,但在 8 中,它是 /etc/init.d/rc.local。在我的 18.04 上,我没有这些,我应该创建它们吗?你说的是不同的文件还是一个错误? (2认同)

rub*_*o77 37

在较新的 Ubuntu 版本systemd上使用并且/etc/rc.local默认情况下并不总是加载。

检查兼容性服务是否加载

systemctl status rc-local.service
Run Code Online (Sandbox Code Playgroud)

截屏

如果它包含活动(退出),您的设置看起来不错,并且您的/etc/rc.local文件中可能有另一个错误(例如,这可能是一个失败的命令)。

  • 如果 rc-local.service 未激活,请查看这篇文章,说明 [How to Enable /etc/rc.local with Systemd](https://www.linuxbabe.com/linux-server/how-to-enable-etcrc -local-with-systemd) (7认同)