标签: init-script

如何将 init.d 脚本日志消息写入磁盘?

我正在运行 Debian wheezy。许多脚本/etc/init.d/使用Linux 标准库中定义的各种日志功能,例如log_success_msglog_warning_msg。LSB 文档对于这些函数应该做什么似乎有点模棱两可:

log_success_msg 函数将使系统将成功消息写入未指定的日志文件。消息的格式未指定。log_success_msg 函数也可以将消息写入标准输出。

不过,我想这被解释为意味着该功能可以要么写日志文件只写到标准输出。似乎至少在 Debian 上,它只会导致将一条消息写入标准输出。当我检查定义这些函数的文件时,我的怀疑得到了证实/lib/lsb/init-functions- 它只是调用echo以显示任何日志消息。

这不是有益的行为。引导完成后不久写入标准输出的文本就会消失,并且很可能在任何情况下都滚动到屏幕顶部。如果这些消息实际上存储在日志文件中,那肯定会更有帮助;事实上,如果这些函数只是去标准输出,我什至看不到通过这些函数记录任何东西的意义。

有没有办法让这些日志进入一个文件?任何人都可以启发我为什么你会费心将任何东西“记录”到标准输出?它有什么有用的功能?

logs debian init-script

7
推荐指数
1
解决办法
9541
查看次数

看门狗守护进程不会在启动时启动

我正在使用带有 Raspbian 的 Raspberry Pi B。升级到 Jessie 后,看门狗守护进程不再在启动时启动。使用“sudo service watchdog start”手动启动它确实有效。我试过:

  • 清除并重新安装看门狗
  • update-rc.d watchdog defaults && update-rc.d watchdog enable
  • systemctl enable watchdog 产生这个错误:

单元文件没有 [Install] 部分。它们并不意味着使用 systemctl 启用。

我检查了

  • 系统日志在调试时具有 systemd 详细信息,没有结果。除了看门狗设备没有提到。
  • systemctl list-units | grep -i watchdog 是空的(除非我手动启动它)
  • 我的默认运行级别是 5,看门狗的优先级/etc/rc5.d/也是 5。

我还能尝试什么?

init-script systemd raspberry-pi watchdog raspbian

7
推荐指数
1
解决办法
9078
查看次数

systemctl 可以列出所有启用的服务,包括遗留服务吗?

这个问题问:“如何从 systemctl 列出所有启用的服务?” 该页面上的答案包括:

systemctl list-unit-files | grep enabled
systemctl list-unit-files --state=enabled
Run Code Online (Sandbox Code Playgroud)

至少从 systemd 版本 229(在 Ubuntu 16.04 上)开始,systemctl list-unit-files将不包括通过旧版 init 脚本启动的“LSB”服务。

因此,最初的问题似乎仍未得到解答:systemd 能否显示它将在启动时尝试启动的所有服务(和其他单元类型)的列表,包括遗留服务?

考虑:

$ systemctl list-units | grep LSB | grep grub
  grub-common.service    loaded    active exited    LSB: Record successful boot for GRUB

$ systemctl list-unit-files | grep enabled | grep grub || echo 'nothing found'
nothing found

$ systemctl is-enabled grub-common
grub-common.service is not a native service, redirecting to systemd-sysv-install
Executing /lib/systemd/systemd-sysv-install is-enabled grub-common
enabled …
Run Code Online (Sandbox Code Playgroud)

startup init-script systemd sysvinit lsb

7
推荐指数
1
解决办法
1万
查看次数

我可以让 Qemu 在内核恐慌失败时退出吗?

我正在尝试将 Qemu 添加到我的持续集成管道中以测试各种initrd工件。我已经发现我可以像这样运行 Qemu:

qemu-system-x86_64 \
    -machine q35 \
    -drive if=pflash,format=raw,file=OVMF_CODE.fd,readonly \
    -drive if=pflash,format=raw,file=OVMF_VARS.fd \
    -kernel vmlinuz-4.4.0-121-generic \
    -initrd my-initramfs.cpio.xz \
    -nographic
Run Code Online (Sandbox Code Playgroud)

...如果我在脚本中执行此操作,则会导致qemu-system-x86_64退出状态:0init

# poweroff -f
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为 init 脚本不会退出——它会poweroff -f“永远”调用和休眠,或者直到 Qemu 执行“断电”:

ACPI: Preparing to enter system sleep state S5
reboot: Power down
Run Code Online (Sandbox Code Playgroud)

我希望能够init通过强制执行exit错误来检测脚本中的问题set -eu。退出init脚本(正确)会导致内核崩溃,但qemu-system-x86_64进程永远挂起。

我怎样才能让它永远挂起来?如何让 Qemu 主机检测 Qemu 来宾中的内核崩溃?

进一步澄清:

我的应用程序的性质是安全敏感的;即,“允许”配置/编译 linux 内核,但不允许传递内核参数。把它放在一个很好的点上,CMDLINE_OVERRIDE启用。

linux kernel-panic init-script qemu linux-kernel

7
推荐指数
2
解决办法
3516
查看次数

启动时的系统日志消息:未初始化的 urandom 读取

CPU是AMD GX-412TC SOC

\n
\n

GX-412TC GE412TIYJ44JB 4 6W 2MB 1.0GHz/\n1.4GHz 不适用 DDR-1333 0-90\xc2\xb0C

\n
\n

其中没有rdrand

\n
grep rdrand /proc/cpuinfo\n# nothing\n
Run Code Online (Sandbox Code Playgroud)\n

我在syslog机器启动后看到以下消息:

\n
kernel: random: dd: uninitialized urandom read (512 bytes read)\nkernel: random: cryptsetup: uninitialized urandom read (32 bytes read)\n
Run Code Online (Sandbox Code Playgroud)\n

这些消息到底意味着什么?我能做什么?

\n

这是否意味着ddcryptsetup尝试读取/dev/urandom,但没有足够的熵?

\n

我正在使用haveged守护程序,但它是在引导过程后期启动的,在出现此消息之后。

\n

这是我的引导脚本启动顺序:

\n
/etc/rcS.d/S01hostname.sh\n/etc/rcS.d/S01mountkernfs.sh\n/etc/rcS.d/S02mountdevsubfs.sh\n/etc/rcS.d/S03checkroot.sh\n/etc/rcS.d/S04checkfs.sh\n/etc/rcS.d/S05mountall.sh\n/etc/rcS.d/S06bootmisc.sh\n/etc/rcS.d/S06procps\n/etc/rcS.d/S06urandom\n/etc/rcS.d/S07crypto-swap\n/etc/rc2.d/S01haveged\n/etc/rc2.d/S01networking\n/etc/rc2.d/S04rsyslog\n/etc/rc2.d/S05cron\n/etc/rc2.d/S05ssh\n
Run Code Online (Sandbox Code Playgroud)\n

系统日志中的消息来自这两个脚本:

\n
/etc/rcS.d/S06urandom  -> dd\n/etc/rcS.d/S07crypto-swap -> cryptsetup\n
Run Code Online (Sandbox Code Playgroud)\n

应该haveged先开始urandom? …

boot init-script syslog random

7
推荐指数
1
解决办法
4643
查看次数

缺少 init.d/apache2 文件

在尝试删除 apache 和 tomcat,现在尝试重新安装 apache 2 后,我缺少init.d/apache2启动/停止服务器的文件。

我不确定新安装是否真的有效,而且我一开始apt-get purge apache2并没有删除所有东西!

如何获取init.d/apache2文件以测试服务器是否正确启动/安装(我手动删除了文件和目录)?

debian init-script sysvinit apache-httpd

6
推荐指数
2
解决办法
2万
查看次数

进程字段中的 inittab '-' 字符

我有一个包含inittab以下条目的文件:

console::askfirst:-/bin/ash
Run Code Online (Sandbox Code Playgroud)

根据此手册页,流程字段中的“+”字符表示

init不会对该进程进行 utmp 和 wtmp 计算。

但是,它没有说明“-”字符。进程字段中的“-”字符有什么作用?

linux init-script busybox init

6
推荐指数
1
解决办法
1273
查看次数

以非 root 用户身份运行服务的推荐方法是什么?

我有一个简单的 init.d 脚本来启动和停止一个进程。我以 root 身份调用 init.d,但我希望它控制的进程以特定用户身份运行。

网上最常见的建议似乎是做

su myuser -c "my_process args"
Run Code Online (Sandbox Code Playgroud)

但是,这会创建第二个进程空间、新 shell 等,并且有些不雅。

我更喜欢使用exec(),因为它取代了外壳,但这不以用户为参数。这是我应该setuid()首先使用的情况吗?设置gid怎么样?有什么需要注意的问题吗?

或者,是否有特定于发行版的解决方案来以不同的用户身份运行 init.d?我的环境是Centos 6.4。

init-script services exec

6
推荐指数
1
解决办法
1925
查看次数

重新启动显示管理器的全部命令?

是否有一个包罗万象的命令来重新启动显示管理器(在任何给定的通用初始化系统上)?

systemctl restart display-manager目前已经有了基于 systemd 的系统,但我不知道这是否适用于每个基于 systemd 的系统,并且它肯定不适用于其他init 系统。

是否还有其他可能起作用的包罗万象的命令(假设特定的通用初始化系统安装在通用发行版上)?

init-script x11 display-manager

6
推荐指数
1
解决办法
2万
查看次数

启动时自动运行 sudo 命令

为了调整我的华硕 Zenbook 上的屏幕板背光,我使用了在这里找到的内核模块。根据他的指示,要使用简单的screenpad x命令来调整亮度来创建按键绑定快捷方式,我需要添加sudo chmod a+w '/sys/class/leds/asus::screenpad/brightness'到“rc.local”,因为每次重新启动都需要该命令,并且每次都需要密码。通过自动运行,我可以立即使用自定义键盘快捷键,因为它们可以在 Windows 上的驱动程序中正常运行,而无需每次启动时运行命令并输入密码。

我是 Parrot OS 上的 Linux 新用户。根据我收集的信息,不建议使用 rc.local,我应该使用 systemd、cronjob,或者使用 GUI 启动应用程序菜单将其作为进程运行。

我完全迷失了如何使用 systemd 或 cronjob 来执行此操作。我尝试制作一个名为“screenpad-perms.sh”的文件并将其放入 /usr/local/bin 中,根据我所读到的内容,其中仅包含以下几行:

#! /bin/bash

sudo chmod a+w '/sys/class/leds/asus::screenpad/brightness'
Run Code Online (Sandbox Code Playgroud)

然后我使用它使其可执行chmod +x screenpad-perms.sh。最后,我打开 GUI 自动启动应用程序并将其添加为登录脚本。

重新启动电脑,但它不起作用,除非我手动键入并输入密码,否则键入screenpad x会出现权限被拒绝错误;sudo chmod a+w '/sys/class/leds/asus::screenpad/brightness'所以它似乎没有被执行。

再次抱歉,因为我对 Linux 还很陌生,只是希望这个屏幕能够正常工作。我在这里缺少什么?

startup sudo init-script systemd parrotsec

6
推荐指数
1
解决办法
2万
查看次数