如何在启动时运行“ rc.local”?


74

我有一个想要在系统启动时运行的脚本。我已经将其放在“ rc.local”上,但是它不起作用。如何使它在启动时运行?


1
xsetwacom命令在哪里?/etc/rc.local在启动时使用非常简单的PATH执行。它可能不同于您在终端上登录的PATH。在终端中,键入:type -p xsetwacom,然后用“ type -p”返回的完整路径替换/etc/rc.local中的“ xsetwacom”命令。在xsetwacom为您工作之前,您是否需要进行任何手动初始化?
waltinator 2011年

3
使用systemd作为启动管理器,请确保rc.local兼容性正在运行:systemctl status rc-local.service
rubo77 '16

沃尔丁纳特的评论是我的问题。由于路径最少,因此它不知道如何运行我想运行的脚本。在运行/etc/rc.local时在我的Ubuntu 14.04系统上加载的路径如下:/ sbin:/ usr / sbin:/ bin:/ usr / bin ...您可以通过将echo $PATH > /home/rc_local_path/放入/ etc / rc.local,然后在启动后运行该文件。
RaisinBranCrunch

请记住,如果您的脚本需要连续运行 ,则必须rc.local文件中将其作为守护程序启动
totymedli

使用sudo systemctl enable rc-local.service以确保/etc/rc.local 在服务器启动过程中执行的
威廉

Answers:


55

您可以手动运行脚本吗?如果没有,那就是该脚本的问题。否则,请查看rc.local。(如果该脚本需要以超级用户身份运行,则需要使用sudo手动运行它。)

确保/etc/rc.local是可执行的,并且它调用的脚本也是可执行的。

$ ls -l /etc/rc.local
-rwxr-xr-x 1 root root 419 2010-08-27 11:26 /etc/rc.local

确保rc.local有一个shebang行(这是默认行):

$ head -n1 /etc/rc.local
#!/bin/sh -e

是的,我可以手动运行脚本。如何确定/etc/rc.local是可执行文件?我必须输入什么?是“ $ ls -l /etc/rc.local -rwxr-xr-x 1”吗?谢谢!
pedroo 2010年

@pedroo:我已经复制正是我看到在我的终端(这样你就看到提示,输入和输出都以上)。该命令是“ ls -l /etc/rc.local”,如果它是可执行的,它将在输出中包含那些X。

3
我已经尝试过“ ls -l /etc/rc.local”并且它是可执行的,但是我无法使其在启动时运行。
pedroo 2010年

1
@pedroo:这需要X服务器运行,这在rc.local执行时不会发生。从rc.local运行它只会使其退出而无需执行任何操作(尽管我希望它将消息放置在syslog或其他地方)。您需要将xsetwacom命令放在〜/ .xinitrc或/ etc / X / xinit / xinitrc中。

1
@pedroo:因为rc.local包含旨在在不同时间运行的命令。创建一个新文件,您可以将其放在〜/ bin中,将其标记为可执行文件(Nautilus中为chmod或属性),将第一行设置为“#!/ bin / bash”,然后将您的命令放在后面的行中。

53

就我而言,这些说明都不是完美的解决方案。如果您和我一样不走运,请尝试这个详细的

  1. 将所有执行代码放在具有任意名称(例如foo.sh)的单独文本文件中,并将其保存在任意位置。
  2. #!/bin/sh

    作为代码的第一行。

  3. 尝试通过执行您的foo.sh

    sudo foo.sh

    检查是否没有错误。

  4. 在sh命令之后为您的/etc/rc.local脚本提供完整路径和所创建脚本的名称

    sh '/path/to/your/script/foo.sh'
  5. 请记住,将以上行放在代码的最后一行之前

    exit 0

    在/etc/rc.local脚本的末尾。

  6. 检查/etc/rc.local的第一行是否为

    #!/bin/sh -e
  7. 使/etc/rc.local可执行文件,以防它尚未被

    sudo chown root /etc/rc.local
    sudo chmod 755 /etc/rc.local
    
  8. 通过执行检查一切正常

    sudo /etc/init.d/rc.local start
  9. 测试重新启动系统。

6
步骤#8是关键,验证脚本将在启动环境下运行。就我而言,我需要给出命令的完整路径。
Peter Gluck

完美的一步一步,它是在centos上sudo /etc/rc.local start运行的,但首先运行。
A1Gard

谢谢-这次故障确实对我有帮助,而步骤8也是我的关键!没有它,它就不会重定向+1(作为参考,运行在bitnami云服务器上的节点应用程序将永远使用以连续运行)。
fidev

第8步是一个很好的技巧,但我认为第7步可能是解决问题的方法,我试图使用cron运行脚本以打开隧道,但它随机失败
-SeanClt

28

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

检查兼容性服务是否已加载

systemctl status rc-local.service

屏幕截图

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


4
如果未激活rc-local.service,请查看这篇说明如何使用
Systemd

3

2条建议。

  1. 确保目标脚本文件也被标记为可执行。
  2. 目标脚本是否正在运行sudo命令?如果是这样,您可能需要提供sudo密码。

我的错。然后检查一个即可。感谢您的修正enzotib :)


8
rc.local以root身份运行,因此不需要密码。
enzotib
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.