我正在运行 Debian wheezy。许多脚本/etc/init.d/使用Linux 标准库中定义的各种日志功能,例如log_success_msg和log_warning_msg。LSB 文档对于这些函数应该做什么似乎有点模棱两可:
log_success_msg 函数将使系统将成功消息写入未指定的日志文件。消息的格式未指定。log_success_msg 函数也可以将消息写入标准输出。
不过,我想这被解释为意味着该功能可以要么写日志文件或只写到标准输出。似乎至少在 Debian 上,它只会导致将一条消息写入标准输出。当我检查定义这些函数的文件时,我的怀疑得到了证实/lib/lsb/init-functions- 它只是调用echo以显示任何日志消息。
这不是有益的行为。引导完成后不久写入标准输出的文本就会消失,并且很可能在任何情况下都滚动到屏幕顶部。如果这些消息实际上存储在日志文件中,那肯定会更有帮助;事实上,如果这些函数只是去标准输出,我什至看不到通过这些函数记录任何东西的意义。
有没有办法让这些日志进入一个文件?任何人都可以启发我为什么你会费心将任何东西“记录”到标准输出?它有什么有用的功能?
我正在使用带有 Raspbian 的 Raspberry Pi B。升级到 Jessie 后,看门狗守护进程不再在启动时启动。使用“sudo service watchdog start”手动启动它确实有效。我试过:
update-rc.d watchdog defaults && update-rc.d watchdog enablesystemctl enable watchdog 产生这个错误: 单元文件没有 [Install] 部分。它们并不意味着使用 systemctl 启用。
我检查了
systemctl list-units | grep -i watchdog 是空的(除非我手动启动它)/etc/rc5.d/也是 5。我还能尝试什么?
这个问题问:“如何从 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) 我正在尝试将 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启用。
CPU是AMD GX-412TC SOC:
\n\n\nGX-412TC GE412TIYJ44JB 4 6W 2MB 1.0GHz/\n1.4GHz 不适用 DDR-1333 0-90\xc2\xb0C
\n
其中没有rdrand:
grep rdrand /proc/cpuinfo\n# nothing\nRun Code Online (Sandbox Code Playgroud)\n我在syslog机器启动后看到以下消息:
kernel: random: dd: uninitialized urandom read (512 bytes read)\nkernel: random: cryptsetup: uninitialized urandom read (32 bytes read)\nRun Code Online (Sandbox Code Playgroud)\n这些消息到底意味着什么?我能做什么?
\n这是否意味着dd并cryptsetup尝试读取/dev/urandom,但没有足够的熵?
我正在使用haveged守护程序,但它是在引导过程后期启动的,在出现此消息之后。
这是我的引导脚本启动顺序:
\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\nRun Code Online (Sandbox Code Playgroud)\n系统日志中的消息来自这两个脚本:
\n/etc/rcS.d/S06urandom -> dd\n/etc/rcS.d/S07crypto-swap -> cryptsetup\nRun Code Online (Sandbox Code Playgroud)\n应该haveged先开始urandom? …
在尝试删除 apache 和 tomcat,现在尝试重新安装 apache 2 后,我缺少init.d/apache2启动/停止服务器的文件。
我不确定新安装是否真的有效,而且我一开始apt-get purge apache2并没有删除所有东西!
如何获取init.d/apache2文件以测试服务器是否正确启动/安装(我手动删除了文件和目录)?
我有一个包含inittab以下条目的文件:
console::askfirst:-/bin/ash
Run Code Online (Sandbox Code Playgroud)
根据此手册页,流程字段中的“+”字符表示
init不会对该进程进行 utmp 和 wtmp 计算。
但是,它没有说明“-”字符。进程字段中的“-”字符有什么作用?
我有一个简单的 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。
是否有一个包罗万象的命令来重新启动显示管理器(在任何给定的通用初始化系统上)?
我systemctl restart display-manager目前已经有了基于 systemd 的系统,但我不知道这是否适用于每个基于 systemd 的系统,并且它肯定不适用于其他init 系统。
是否还有其他可能起作用的包罗万象的命令(假设特定的通用初始化系统安装在通用发行版上)?
为了调整我的华硕 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 还很陌生,只是希望这个屏幕能够正常工作。我在这里缺少什么?
init-script ×10
systemd ×3
debian ×2
linux ×2
startup ×2
sysvinit ×2
apache-httpd ×1
boot ×1
busybox ×1
exec ×1
init ×1
kernel-panic ×1
linux-kernel ×1
logs ×1
lsb ×1
parrotsec ×1
qemu ×1
random ×1
raspberry-pi ×1
raspbian ×1
services ×1
sudo ×1
syslog ×1
watchdog ×1
x11 ×1