我的脚本中有一个命令/etc/rc.local
,用于启动更新守护进程微小的 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里的命令?
答案1
rc.local
如果在执行任何命令时发生任何错误(提及-e
中的标志#!/bin/sh -e
),脚本将退出。
当您尝试运行命令时,可能由于rc.local
执行过程中某些先决条件不满足,导致命令执行失败。
我在手动设置 CPU 调节器时遇到了同样的问题,但未能成功rc.local
。这是我的自定义解决方法,它用于update-rc.d
让您的命令在启动时运行:
myscript.sh
在目录中创建一个/etc/init.d
具有标题的文件:#!/bin/sh
- 将你的自定义命令作为内容
- 使其可执行:
sudo chmod +x /etc/init.d/myscript.sh
- 为您的脚本创建适用于各种运行级别的符号链接:
sudo update-rc.d myscript.sh defaults
另外,您可以检查/etc/network/if-up.d
脚本并查看是否可以在网络启动时触发命令。
答案2
确保 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
答案3
我在 rc.local 中遇到了类似的问题,启动时无法执行
sshades 为我提供了以下答案:
Ubuntu 现在使用 systemd,rc.local 现在被视为默认“关闭”的服务。您可以通过输入以下命令并重新启动来“打开”rc.local:
sudo systemctl enable rc-local.service
虽然我还没有测试过他的解决方案,但我认为它听起来合乎逻辑,而且可行。然而:
我还找到了一个解决方案,将脚本添加到 ./.config/autostart-scripts/ 即可解决问题
答案4
尝试sudo sysv-rc-conf
检查是否rc.local
已启用
rc.local [ ] [x] [x] [x] [x] [ ] [ ] [ ]