Questions tagged «systemd»

systemd是Linux的SystemV和Upstart初始化守护程序的替代方法。它旨在提供一个更好的框架来表达服务的依赖性,允许在系统启动时并行完成更多工作,并减少Shell开销。

2
如何从systemctl状态服务查看完整日志?
我通过检查服务状态systemctl status service-name。 默认情况下,我仅看到几行,因此添加-n50以查看更多行。 有时,我想从一开始就查看完整的日志。它可能有1000行。 现在,我使用它进行检查,-n10000但这看起来并不是一个很好的解决方案。 有没有类似less命令的选项来检查完整的systemd服务日志?
346 logs  systemd 

1
如何为systemd编写启动脚本
我的笔记本电脑上有2个图形卡。一个是IGP,另一个是离散的。 我已经编写了一个Shell脚本来关闭独立显卡。 如何将其转换为systemd脚本以在启动时运行它?

10
如何清除journalctl
我在Google中找不到清除系统日志的任何安全方法。有谁知道安全可靠的方法吗? 假设我正在尝试某些东西,但日志中却堆满了各种错误消息。此外,我正在使用Conky在桌面上显示日记。我真的不想看到这些错误,因为它们让我想起了我正在修理此产品的糟糕一天,我想在经历过这种恐怖之后感觉像个新鲜人。我想每个人都会同意,这是清除日志:P的正当理由。


2
查看systemd服务的stdout / stderr
我为自定义应用程序创建了一个简单的systemd服务文件。当我手动运行该应用程序时,它运行良好,但是当我使用systemd运行该应用程序时,我的CPU耗尽了。 我正在尝试找出问题所在,但不知道在哪里找到输出(或如何配置systemd将输出放置在某处)。 这是我的服务文件: [Unit] Description=Syncs files with a server when they change Wants=network.target After=network.target [Service] ExecStart=/usr/local/bin/filesync-client --port 2500 WorkingDirectory=/usr/local/lib/node_modules/filesync-client Restart=always [Install] WantedBy=multi-user.target 在整个应用程序中,我输出到stdout和stderr。 如何读取守护程序的输出? 编辑: 我发现了man systemd.exec,其中提到了该StandardOutput=选项,但是我不确定如何使用它。从手册页: StandardOutput= 控制已执行进程的文件描述符1(STDOUT)连接到的位置。采取以下之一:继承,null,tty,syslog,kmsg,kmsg + console,syslog + console或socket。 如果设置为继承,则将标准输入的文件描述符复制为标准输出。如果设置为null,则标准输出将连接到/dev/null,即写入其中的所有内容都将丢失。如果设置为tty,则标准输出将连接到tty(通过进行配置TTYPath=,请参见下文)。如果使用TTY输出,则仅执行的过程将不会成为终端的控制过程,也不会失败或等待其他过程释放终端。 syslog将标准输出连接到syslog(3)系统记录器。 kmsg将其与内核日志缓冲区连接,该缓冲区可通过dmesg(1)访问。 syslog +控制台和kmsg +控制台工作类似,但也将输出复制到系统控制台。 socket通过套接字激活将标准输出连接到套接字,其语义类似于的相应选项StandardInput=。此设置默认为继承。 这是否意味着这些是我唯一的选择?例如,我想输入输出内容/dev/shm。我想我可以使用Unix域套接字并编写一个简单的侦听器,但这似乎有点不必要。 我只需要使用它进行调试,最终可能会删除大多数日志并将输出更改为syslog。

1
在启动systemd服务之前执行chdir
问题:我可以使用systemd启动一个进程并为该进程分配我选择的工作目录吗? 我要开始提供一项服务systemd。启动该服务时,我希望能够为其分配一个当前的工作目录。如果我使用的话我知道怎么做init,但是我遇到了麻烦systemd。 这就是我一直在努力的工作。 我的服务 我创建了一个简单的实用程序(“ listdir”),用Python编写,并放置在/opt/bin/listdir: #! /usr/bin/python import os print 'Current working directory: %s' % (os.getcwd()) 我的配置文件 然后,我为创建了一个listdir.service文件systemd并将其放在这里/lib/systemd/system/listdir.service: [Unit] Description=Test of listing CWD. [Service] ExecStartPre=chdir /usr/local ExecStart=/opt/bin/listdir StandardOutput=syslog StandardError=syslog [Install] WantedBy=multi-user.target 问题 运行systemctl start listdir系统日志时,将根目录(“ /”)记录为当前工作目录。当然,我希望将其/usr/local作为当前目录,因为我认为ExecStartPre在启动该过程之前会更改目录。 显然,我在systemd想这会像Shell脚本一样工作(即使我知道它不是Shell脚本)。有人可以告诉我应该怎么做吗?甚至可以使用设置工作目录systemd吗?谢谢! 编辑:我的系统日志报告错误。(我刚刚注意到。) Executable path is not absolute, ignoring: chdir /usr/local 因此,它chdir是一个shell命令,而不是可执行文件本身。好的。但是我还有什么方法可以使用更改目录systemd吗?
148 systemd 

2
systemd如何使用/etc/init.d脚本?
我只是改用了debian jessie,大多数情况都可以正常运行,包括我的图形显示管理器wdm。 问题是,我只是不了解它是如何工作的。显然,我的/etc/init.d/wdm脚本被调用了,因为当我exit在其中放早时,wdm没有启动。但是,当我选择重命名/etc/rc3.d目录(我的默认运行级别以前是3)时,wdm仍然会启动。 我无法找到systemd如何找到该脚本,也无法理解它对所有其他init.d脚本的作用。 systemd何时以及如何运行init.d脚本? 从长远来看,我应该摆脱所有init.d脚本吗?

3
编写基本的系统服务文件
我正在开发一个Nodejs应用程序,用户可以通过localhost上的HTTP与之交互。几乎没有参数,守护程序实际上没有依赖关系,只需要在登录时启动即可。 我想遵循每个平台上用于启动脚本的习惯用法,这意味着Ubuntu上的Upstart和Fedora上的systemd。 有什么好的教程来编写systemd系统文件吗? 有什么“最佳实践”需要注意吗? 我发现了以下资源: 关于systemd的Fedora Wiki页面 关于编写systemd系统文件的博客 维基百科上的系统 我主要是在寻找各种API作为参考,以及要遵循的基本格式。
103 services  systemd 

7
使脚本在网络启动后执行?
我对systemd比较陌生,正在学习其体系结构。 现在,我正在尝试弄清楚如何使自定义外壳脚本运行。网络层启动后,需要运行此脚本。 我正在运行Arch,同时使用systemd和netctl。 为了进行测试,我编写了一个简单的脚本,该脚本仅执行ip addr list > /tmp/ip.txt。我为此脚本创建了以下服务文件。 (/etc/systemd/system/test.service) [Unit] Description=test service [Service] ExecStart=/root/test.script [Install] WantedBy=multi-user.target 然后,我使用以下命令启用了脚本: systemctl enable test 重新启动后,该脚本确实确实在运行,但是在网络启动之前运行。换句话说,中的输出ip.txt不显示分配给主接口的IPv4地址。在我登录时,确实已分配了IPv4地址,并且网络已建立。 我猜我可以通过弄乱WantedBy参数来更改脚本的运行点,但是我不确定如何做到这一点。 有人可以指出我正确的方向吗?

7
测试服务是否在脚本中运行的“正确”方法
我的问题: 我正在编写一个bash脚本,在其中我想检查给定的服务是否正在运行。 我知道如何使用手动进行操作$ service [service_name] status。 但是(尤其是自从移至systemd以来),它会打印出一堆很难理解的混乱文本。我假设有一个针对脚本的命令,该脚本具有简单的输出或可以检查的返回值。 但是,谷歌搜索只会产生大量的“哦,就是ps aux | grep -v grep | grep [service_name]”结果。那不是最佳实践,是吗?如果该命令的另一个实例正在运行,但不是由SysV初始化脚本启动的,该怎么办? 还是我应该闭嘴并用一点pgrep弄脏我的手?

4
如何找到可用的网络接口?
这是关于linux的,但是如果有人知道通用的* nix方法会很好。 昨天,我使用插入的以太网电缆引导了系统。未安装“ NetworkManager”,因此一旦启动,我便去寻找用于ifconfig手动启动DHCP客户端的以太网接口的名称,但是除了显示其他内容外lo。 通过列出了NIC lspci,并加载了适当的内核驱动程序。系统通常使用wifi,我记得它的接口名称是wlan0。当我尝试时ifconfig wlan0 up,wlan0出现了。但是我能记得的只有以太网接口的名字是eth[N]和em[N]-这两者都不工作。 本文档引用了“可预测的接口名称”,但是并不能很好地用简单的术语解释它们的含义。它确实引用了一段源代码,这意味着在这种情况下,该名称可能是从PCI总线和插槽号推导出来的,这似乎是不必要的复杂麻烦。 其他搜索使我相信,这可能是由systemd与结合确定的udev,但是其中几乎有100个文件/usr/lib/udev/rules.d,花了一个小时试图确定在哪里(如果有)有一个systemd配置文件,这似乎也很荒谬。 这也将是不错的肯定知道,他们是可用的,不只是他们怎么可能被命名为,如果是这样,所以我可以排除硬件问题等是不是有一个简单的方法来找到可用的网络接口的名称在Linux上?

2
如何在CentOS 7下显示以前启动时的日志消息?
journalctl在CentOS 7系统下执行只会打印上次引导后生成的消息。 命令 # journalctl --boot=-1 版画 Failed to look up boot -1: Cannot assign requested address 并以状态1退出。 将它与当前的Fedora系统进行比较,我注意到CentOS 7没有/var/log/journal(journalctl也没有提供--list-boots)。 因此,我的问题是如何显示上次启动日期之前写入的日志消息。 或者,也许必须在CentOS 7上启用此功能? (journalctl手册页列出了“ systemd 208”作为版本号。)

2
具有奇怪随机名称的进程占用了大量网络和CPU资源。有人在砍我吗?
在云提供商的虚拟机中,我看到一个带有奇怪随机名称的进程。它消耗大量的网络和CPU资源。 从pstree视图的角度来看,该过程是这样的: systemd(1)───eyshcjdmzg(37775)─┬─{eyshcjdmzg}(37782) ├─{eyshcjdmzg}(37783) └─{eyshcjdmzg}(37784) 我使用附加了该过程strace -p PID。这是我得到的输出:https : //gist.github.com/gmile/eb34d262012afeea82af1c21713b1be9。 终止进程不起作用。它以某种方式(通过systemd?)复活了。这是从systemd角度看的样子(请注意底部的怪异IP地址): $ systemctl status 37775 ● session-60.scope - Session 60 of user root Loaded: loaded Transient: yes Drop-In: /run/systemd/system/session-60.scope.d └─50-After-systemd-logind\x2eservice.conf, 50-After-systemd-user-sessions\x2eservice.conf, 50-Description.conf, 50-SendSIGHUP.conf, 50-Slice.conf, 50-TasksMax.conf Active: active (abandoned) since Tue 2018-03-06 10:42:51 EET; 1 day 1h ago Tasks: 14 Memory: …


1
在最近的公司计算机上启动期间崩溃
经过一些最近的更新后,我的计算机不再启动!这是我可以确定的: 这是公司IT向我提供的最新计算机。它具有最新的Intel CPU(Skylake一代)。 该计算机运行Ubuntu 16.04。 上一次在三月份的某个时间正确启动了计算机。该问题可能是由于软件更新或硬件错误引起的。 我有一台运行16.04的计算机,安装了几乎相同的软件(我使用过apt-clone),并且工作正常。它具有不同的硬件(也为amd64,但具有不同的CPU,不同的GPU等)。 内核确实启动,initrd正常工作。在图形模式下使用启动屏幕启动时,系统提示输入dm-crypt卷的密码,最后我看到的是它已成功安装。 挂起发生在我得到登录提示之前。当计算机挂起时,这很困难。甚至Alt+ SysRq都没有回应。由于风扇完全爆炸,因此CPU显然固定在100%。 重新启动之前,我仍然有运行中的内核。当我在Grub菜单中选择此内核时,我得到了相同的锁定。因此,这似乎是一个预先存在的内核错误,该错误由其他原因触发-但是呢? 如果我关闭了启动画面(splash从linuxGrub中的命令行删除),则看到许多服务正在启动,然后它将锁定。 我可以通过添加得到一个root shell init=/bin/sh到linux在GRUB命令行。我什至可以通过添加进一步 systemd.unit=basic.target systemd.shell 这将启动许多服务,并在tty9上运行根shell。 如果我systemctl start multi-user.target从该根外壳运行,则计算机将锁定。因此,大概是这些服务之一触发了问题。 我跑去systemctl list-dependencies multi-user.target看什么服务开始。我一一手动启动了列出的依赖项,一切开始正常。 因此,这看起来像是由某些软件触发的硬件错误(因为它发生在一台计算机上,而不是另一台计算机上)。但是什么软件?由于计算机锁定非常困难,因此无法获取任何日志。我什至无法获得任何有用的控制台输出。 有用的调试技术: Alt+ SysRq:魔术SysRq键,可让您执行紧急重启之类的操作。它以非常低的级别访问内核,因此除了最严重的崩溃外,它都能正常工作。就我而言,Alt+ SysRq不会响应,这表明崩溃的程度。 要修改启动参数,请Shift在打开电源后按住几秒钟。在BIOS初始化键盘之后,但在操作系统引导之前,您需要按一下它。这将使Grub菜单出现。 在Grub菜单上,按e编辑菜单项的命令行。要更改Linux引导参数,请导航至以开头的行linux。在现代Ubuntu上,您会在“ Ubuntu的高级选项”下找到旧内核。对命令行进行所需的更改后,请按Ctrl+ x引导。您在此处所做的任何更改仅用于此引导,它们不会保存到磁盘。 linux命令行上一些有用的选项: quiet nosplash隐藏几乎所有引导消息。删除它们以在启动期间在控制台上获取消息,这对于诊断问题是必须的。 recovery为您提供了几乎没有服务的root shell。您需要知道root密码。“恢复模式”菜单项使用此选项。 init=/bin/sh为您提供了根本没有服务的root shell。要恢复正常引导,请运行exec init。您可以在此时传递systemd选项,例如exec init --unit=basic.target,启动init和一些服务(请注意,这不会以任何方式启动登录,因此最好在另一个控制台上运行shell)。注意,根文件系统是只读安装的;运行mount -o remount,rw /以能够对其进行写入。 systemd.unit=basic.target启动一组非常基本的服务。请注意,这不包括任何登录方式!您可以通过systemctl set-default basic.target在根目录提示符下运行将其设置为默认值。要恢复原始的默认目标,请运行systemctl set-default …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.