为什么启动期间/etc/rc.local中的命令没有执行?

我在/etc/rc.local脚本中有一个命令,它应该在启动期间启动Tiny Tiny RSS的更新守护程序,但在启动期间不会执行该脚本。 为什么?

整个/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. /sbin/start-stop-daemon -b -c www-data:www-data -S -x /usr/bin/php /var/www/ttrss/update_daemon2.php -- -quiet exit 0 

/etc/rc.local是可执行的:

 # ls -l /etc/rc.local -rwxr-xr-x 1 root root 342 May 25 16:14 /etc/rc.local 

/etc/init.d/rc.local存在且可执行:

 # ls -l /etc/init.d/rc.local -rwxr-xr-x 1 root root 801 Jul 27 2012 /etc/init.d/rc.local 

/etc/init.d/rc.local应该在启动时为此运行级别执行:

 # runlevel N 2 # ls -l /etc/rc2.d/S99rc.local lrwxrwxrwx 1 root root 18 Sep 22 2012 /etc/rc2.d/S99rc.local -> ../init.d/rc.local 

如果我从命令行手动调用/etc/rc.local,则update_daemon会加载…

 # /etc/rc.local # ps ax | grep update_daemon2.php 2233 ? S 0:00 /usr/bin/php /media/sda5/www/news/update_daemon2.php -quiet 2234 ? S 0:00 /usr/bin/php /media/sda5/www/news/update_daemon2.php -quiet 

…每次我的服务器重新启动时都必须记住这一点,直到修复此问题为止。

类似的 问题 已经存在,但到目前为止,我一直无法将信息应用于我的具体问题。

为什么rc.local中的命令在启动期间没有执行?

如果在执行任何命令时发生任何错误,则退出rc.local脚本(在#!/bin/sh -e提及-e标志)。

当您尝试在执行rc.local时运行命令时,可能无法满足某些先决条件,因此您的命令执行失败。

我在手动设置cpu调控器时遇到了同样的事情,并且在rc.local没有这样做。 这是我的自定义解决方法,它使用update-rc.d使命令在启动时运行:

  1. 在目录/etc/init.d创建一个文件myscript.sh ,标题为: #!/bin/sh
  2. 将您的自定义命令作为内容
  3. 使其可执行: sudo chmod +x /etc/init.d/myscript.sh
  4. 为各种运行级别的脚本创建符号链接: sudo update-rc.d myscript.sh defaults

此外,您可以检查/etc/network/if-up.d脚本,看看是否可以在网络启动时触发命令。

尝试sudo sysv-rc-conf并检查是否启用了rc.local

 rc.local [ ] [x] [x] [x] [x] [ ] [ ] [ ] 

我们在加载FW规则的某些托管服务器上遇到此问题。

在这些盒子上,他们很快就重新启动,我们发现在load语句似乎解决了这个问题之前,只需在rc.local中放入一个“sleep 1”。 我想在加载FW规则之前,它给了一点时间让接口解决。

确保rc.local脚本是可执行的:

 sudo chmod +x /etc/rc.local 

然后,启用它:

 sudo systemctl enable rc-local.service 

通过运行以下命令重新启动系统或手动启动脚本:

 sudo systemctl start rc-local.service 

运行以下命令可以显示服务状态:

 $ sudo systemctl status rc-local.service ● rc-local.service - /etc/rc.local Compatibility Loaded: loaded (/lib/systemd/system/rc-local.service; static; vendor preset: enabled) Drop-In: /lib/systemd/system/rc-local.service.d └─debian.conf Active: active (running) since Mon 2018-04-02 10:39:44 -03; 1s ago Process: 2044 ExecStart=/etc/rc.local start (code=exited, status=0/SUCCESS) Main PID: 2049 (svscanboot) Tasks: 3 Memory: 556.0K CPU: 10ms CGroup: /system.slice/rc-local.service 

我在rc.local中有一些类似的问题没有在启动时执行

sshades给了我以下答案:

Ubuntu现在正在使用systemd,而rc.local现在被认为是默认情况下“关闭”的服务。 您可以通过输入以下命令并重新启动来打开rc.local“on”:

 sudo systemctl enable rc-local.service 

https://askubuntu.com/a/770033/395498

虽然我还没有测试过他的解决方案,但我认为这听起来合乎逻辑且有效。 但是:

我还找到了一个解决方案,即添加脚本到./.config/autostart-scripts/就可以了

我曾经在Windows中用记事本编辑过rc.local ,但它开始出现这个问题。

在这种情况下,使用文本编辑器支持EOL转换(如Notepad ++)将EOL样式转换为“Unix”,可以解决它。

你也可以这样做:set ff=unix在Vim中:set ff=unix

您必须确保在服务器启动期间使用以下命令执行/etc/rc.local

sudo systemctl enable rc-local.service

Interesting Posts