x-x*_*x-x 44 server startup boot scripts tt-rss
我的/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
Run Code Online (Sandbox Code Playgroud)
/etc/rc.local 是可执行的:
# ls -l /etc/rc.local
-rwxr-xr-x 1 root root 342 May 25 16:14 /etc/rc.local
Run Code Online (Sandbox Code Playgroud)
/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
Run Code Online (Sandbox Code Playgroud)
/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
Run Code Online (Sandbox Code Playgroud)
如果我从命令行手动调用 /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
Run Code Online (Sandbox Code Playgroud)
...每次我的服务器重新启动时我都必须记住这样做,直到这个问题得到解决。
类似的 问题 已经存在,但到目前为止,我一直无法将其中的信息应用于我的具体问题。
为什么启动时没有执行rc.local中的命令?
小智 25
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.shsudo update-rc.d myscript.sh defaults此外,您可以检查/etc/network/if-up.d脚本并查看是否可以在网络启动时触发您的命令。
小智 13
确保 rc.local 脚本是可执行的:
sudo chmod +x /etc/rc.local
Run Code Online (Sandbox Code Playgroud)
然后,启用它:
sudo systemctl enable rc-local.service
Run Code Online (Sandbox Code Playgroud)
通过运行以下命令重新启动系统或手动启动脚本:
sudo systemctl start rc-local.service
Run Code Online (Sandbox Code Playgroud)
可以通过运行来显示服务状态:
$ 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
Run Code Online (Sandbox Code Playgroud)
我在 rc.local 中有一些类似的问题在启动时没有执行
sshades 为我提供了以下答案:
Ubuntu 现在使用 systemd,并且 rc.local 现在被认为是默认关闭的服务。您可以通过输入以下命令并重新启动来打开 rc.local:
sudo systemctl enable rc-local.service
Run Code Online (Sandbox Code Playgroud)
虽然我还没有测试过他的解决方案,但我认为这听起来合乎逻辑并且会奏效。然而 :
我还找到了一个解决方案,将脚本添加到 ./.config/autostart-scripts/ 即可解决问题
尝试sudo sysv-rc-conf检查是否rc.local已启用
rc.local [ ] [x] [x] [x] [x] [ ] [ ] [ ]
Run Code Online (Sandbox Code Playgroud)
小智 5
我们在一些加载 FW 规则的托管服务器上遇到了这个问题。
在这些机器上,它们重新启动非常快,我们发现在加载语句似乎可以解决问题之前,只需在 rc.local 中放置一个“sleep 1”。我想在加载 FW 规则之前,它给了接口一些时间来解决。
| 归档时间: |
|
| 查看次数: |
188377 次 |
| 最近记录: |