为什么以“S”开头的脚本存在于/etc/rc.d/rc{0,6}.d? 把'S'改成'K'会不会有问题?
系统停止/重新启动时系统的行为是否发生了变化?
我在 CentOS 上安装了一个软件(GitLab)。它运行良好,但是这个 GitLab 在启动时启动,我不想要那样。所以我查看了一下/etc/init.d以禁用它chkconfig,但我的问题是其中没有gitlab脚本,所以我无法禁用它。
所以这是我的问题:在 CentOS 中还有其他地方可以找到在 CentOS 启动时执行的程序吗?或者更直接地说,如果有人知道如何在不使用的情况下从启动时禁用 GitLab init.d,我很感兴趣!
有一个脚本(更像是一个命令),我想在每个用户登录的基础上执行。我听说过init.d脚本,但那些需要 root 权限并且不是每个用户可定制的(AFAIK)。简而言之,我正在寻找类似于.bashrc每次用户登录仅执行一次的内容。
为了详细说明这个场景,我目前在 Windows 主机上使用 Ubuntu 来宾操作系统(仿真由 VirtualBox 提供)。每次登录来宾操作系统时,我都需要mount执行一个命令,该命令会将我的共享文件夹挂载到用户主目录中的公共目录中。
因此,长话短说,我试图让 systemd 与 Arch 安装一起工作,但没有从 init 运行 systemd。这意味着我正在启动一个没有运行 systemd 的系统,然后尝试在其上启动 systemd。
我面临的问题与 cgroups 有关 - 在启动期间,systemd 抱怨缺少 /sys/fs/cgroup/systemd 作为 cgroup,因此运行时功能减少,因为它认为 cgroups 不可用。这会导致任何使用 D-Bus 与 systemd 通信的工具出现问题。
正常运行 systemd(作为 PID 1 运行)cgroups 被正确创建并且 systemd 可以完全工作。但是,当它在已经启动的系统上运行时,不会创建 cgroup。我想知道在 init 过程中的哪个点是 /sys/fs/cgroup/systemd 创建/挂载,以及如何在已经运行的系统上复制它?我可以确认不是 /sbin/init 创建了 cgroup,因为运行它会产生相同的结果。
否则,我应该从哪里开始查看 systemd 的源代码?或者也许有一个邮件列表,我可以直接从开发人员那里得到更好的答案?
允许非特权用户控制新贵工作的最佳方法是什么?
通过控制一个新贵的工作,我的意思是启动/停止/重新加载/重新启动它:
start myservice
Run Code Online (Sandbox Code Playgroud)
我可以想象一种方法是通过 sudo;需要做些什么才能使这成为可能?还有其他/更好的方法吗?
注意:这个问题虽然名称相似,但与作为非特权用户运行新贵工作有很大不同,因为它涉及实际服务的执行,而不是对工作的控制。
我有一个较旧的 initd 脚本来启动我的应用程序。它在旧版本的 SuSE 下运行良好,但在 Open SuSE 12.3 上失败。
奇怪的是
cd /etc/init.d ; ./script start
Run Code Online (Sandbox Code Playgroud)
工作正常。
/etc/init.d/script start
Run Code Online (Sandbox Code Playgroud)
显示重定向到 systemctl,但不启动我的应用程序(也不显示 initd 脚本的任何输出)。
我没有看到任何日志条目显示出了什么问题。我看到的唯一条目是在 /var/log/messages 中,说明应用程序已启动。
我该如何调试?
我正在从头开始构建 Linux。目前我有内核、glibc 和 sysvinit。我按照这些说明自己编译了所有内容。虽然我的glibc版本是2.19。另外,我使用 grub 而不是 lilo,但我认为这不会有任何效果。
不管怎样,当我启动时,我最后得到了这个:
Starting init: /sbin/init exists but couldn't execute it (error -8)
Kernel panic - not syncing: No working init found. (and so on)
Run Code Online (Sandbox Code Playgroud)
错误代码 8 表示可执行格式有问题。我还尝试制作另一个打印“asdf”的可执行文件,但这也不起作用(相同的错误)。
那么我应该使用旧版本的 glibc、另一个 c 库、另一个 init 程序(如 systemd)还是这些指令不好?
我的公司设置了一些它开发的软件,在旧版本的 SLES 上使用 init.d 作为服务运行。我们最近开始在 Amazon 的 EC2 中的 SLES 12 实例上设置新环境,并发现 SLES 12 现在使用 systemd 而不是 init.d。然而,init.d 脚本(即 /etc/init.d 中)中定义的服务似乎仍然可以正常启动,因为 systemd 在后台执行一些魔法来处理预先存在的 init.d 脚本,这很棒。
但是,我们不想以 root 用户身份运行我们的服务——而是创建一个新用户来运行我们的服务。问题是,当我们尝试以非 root 用户身份启动我们的服务时,无论 systemd 为运行旧的 init.d 服务做任何准备,都会请求 root 身份验证,我们认为这不是必要的。在较旧的 SLES 环境中(使用实际的 init.d),我们可以毫无问题地以非 root 用户身份启动服务。据我所知,我们的非 root 用户权限和文件所有权在两种环境中都是相同的。
我认为这是 systemd 对旧的 init.d 内容进行后台处理的原因是启动我们服务的脚本在启动/停止服务的实际命令之前立即回显一行文本,但该行不是't output 即我们被要求在 echo 语句之前进行 root 身份验证。隐藏在 systemd 中的某个包/模块需要身份验证,但我现在不记得它的名字了。
请注意,如果可能,我们希望避免为我们的服务创建特定于服务的 .service 文件 - 我们希望坚持使用我们拥有的 init.d 脚本,并以非 root 用户身份运行它。此外,我们希望在不使用 sudo 的情况下运行该服务(我们在旧环境中不需要 sudo)。
对于这个问题缺乏细节表示歉意 - 一旦我回到办公室并可以获取具体细节等,我会用更具体的细节更新它。但这似乎可能是一个常见问题,所以我希望有人可以对此有所了解。
具体来说:我们希望在 SLES 12 上使用 systemd 以非 root 用户身份运行使用旧 init.d …
在 Linux 启动顺序中,内核将执行/sbin/init,但是,我可以看到/init我的 Linux 上的文件系统中存在另一个文件(CentOS 8 WSL2、Ubuntu 20 WSL2)。
它们是不同的二进制文件:
$ diff /init /sbin/init
Binary files /init and /sbin/init differ
Run Code Online (Sandbox Code Playgroud)
/sbin/init和之间有什么区别/init?
Ubuntu 使用 upstart 而不是 sysvinit。但是仍然有运行级别和其中的链接。
我已经安装了 tor 并且它已将自己添加到操作系统的启动中。现在我想删除它,流行的选项是从运行级别删除启动和停止服务的链接或使 /etc/init.d/ 脚本不可执行。这很好,但是如果我想再次将 tor 放在启动列表中,这将是有问题的。我怎么知道将正确的序列放在正确的运行级别目录中。
有没有完整的指南?这有什么规则?任何工具来管理初始化?
请告诉
这个命令的开关和参数是什么意思?
exec su -s /bin/sh -c 'exec "$0" "$@"' root -- /opt/nsq/bin/nsqd
Run Code Online (Sandbox Code Playgroud)
具体的--部分和exec "$0" "$@"应该做什么。
我知道$0为脚本设置一个循环以保持运行。
您可以忽略该/opt/nsq/bin/nsqd部分。这是我正在运行的应用程序。
我正在尝试获取在 /etc/init.d/ar_sendmail 中工作的启动脚本(用于名为 ar_sendmail 的 ruby gem):
#! /bin/sh
echo "in /etc/init.d/ar_sendmail"
DIR=/home/max/work/e_learning_resource/trunk
PATH=/var/lib/gems/1.8/bin
DAEMON=/var/lib/gems/1.8/bin/ar_sendmail
DAEMON_OPTS="-e production -d --batch-size 100 --delay 150"
NAME=ar_sendmail
DESC=ar_sendmail
PID_FILE=/home/max/work/e_learning_resource/trunk/shared/log/ar_sendmail.pid
test -x $DAEMON || exit 0
set -e
case "$1" in
start)
echo -n "Starting $DESC: "
start-stop-daemon -d $DIR --start --quiet --pidfile $PID_FILE \
--exec $DAEMON -- $DAEMON_OPTS
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
kill -TERM `cat $PID_FILE`
rm $PID_FILE
echo "$NAME."
;;
restart)
echo -n "Restarting $DESC: "
kill -TERM …Run Code Online (Sandbox Code Playgroud)