如果我安装了一个新服务,然后决定不再需要该应用程序并删除它,该服务仍会systemctl作为error列在输出中。
这是从哪里来的,我该如何彻底删除它们?
是否可以为我的 systemd 服务提供多个参数?
我想执行一个带有多个参数的程序,这些参数必须由最终用户决定。
例如: ./program arg1 arg2
要启动一个单参数应用程序,我需要类似的东西systemctl start arg1@program,在服务定义中我有ExecStart = /usr/bin/program ?i.
谢谢!
使用 init 脚本(或使用 openrc)我总是可以从不同的安装根运行服务。
但是当我跑步时,chroot /somepath/to_root /usr/bin/systemctl start someservice我得到了:
Running in chroot, ignoring request.
Run Code Online (Sandbox Code Playgroud)
有没有办法强制systemd运行服务?
更新:
我忘了说我的主机系统运行 init 脚本或 openrc,但从来没有使用 systemd,而且我使用 chroot 来对 Unix 系统进行故障排除,这些系统甚至无法启动最小的 shell。
我正在尝试为 编写用户级服务redshift,它需要等到 Xorg 启动并运行。我当前的服务文件如下所示:
[Unit]
Description=Redshift
After=graphical.target
[Service]
Environment=DISPLAY=:0
ExecStart=/bin/redshift -l 28:-13 -t 5300:3300 -b 0.80:0.91 -m randr
Restart=always
[Install]
WantedBy=default.target
Run Code Online (Sandbox Code Playgroud)
但是,它似乎尝试在 Xorg 启动之前启动,之后我必须手动启动该服务。我想我使用了错误的After=目标。任何提示?
我正在编写我的第一个systemd单元文件。
对于Type,有几个选择:forking、simple等。我已经阅读了有关此主题的Redhat 文档(表 9.9),但仍然不确定何时应该使用哪个选项。
有什么指导方针吗?
许多年前,我们可以将启动脚本写入/etc/rc.local. 加载所有系统服务后,您的脚本将运行。
现在,我们使用 systemd,我们没有rc.local了。Systemd 并行启动服务。您可以编写自己的服务来充当 rc.local`,但您不能确保它会在所有系统服务加载后运行。
有没有办法做到这一点?或者我们必须在systemd服务文件中使用Before和After?
我升级到 Ubuntu 17.04,它现在似乎有一个新的 DNS 解析器机制,首先在 Ubuntu 16.10 中引入。
我现在有 50% 的时间遇到 DNS 查找失败。 对 nslookup 的所有其他调用都失败了,其中一半的调用可以正常解决,而另一半给出了这个:
watch -n 1 nslookup google.com
Server: 127.0.0.53
Address: 127.0.0.53#53
** server can't find google.com: SERVFAIL
Run Code Online (Sandbox Code Playgroud)
据我了解,该 DNS 服务器 IP 地址现在用于表示 systemd-resolved,它执行某种元查找以避免较慢的 DNS 查询(或其他...)。我在过去一周升级到 17.04 的两台机器上看到完全相同的行为。
知道这里的问题是什么,以及解决它的正确方法吗?
升级前一切正常(从 16.04 或 16.10 开始,我不记得是哪个,抱歉)。我认为 17.04 是一个 LTS 版本,但现在我看到我跳了起来,直到 4 月它才会被认为是稳定的。所以……我来了。
另外值得注意的是……浏览器似乎没有出现问题,但 nslookup、ping、git 等会出现问题。
更新
在我的特殊情况下,我的 /etc/hosts 文件是一个符号链接(因为我是一个狂热的 stow 用户)。Systemd 出于某种原因讨厌这种情况,并将其视为“权限失败”。一旦我用实际文件替换了符号链接,systemd 就停止了故障。
据我了解,systemd 是 Linux 的“主”守护进程,在启动并运行其 init 函数后立即管理所有其他进程。由于我遇到了这个(现已解决)问题,即无法在 WSL 上使用任何 systemd 命令,我意识到它根本没有 systemd 进程。
现在,出于好奇,我想知道 WSL 依赖于哪个进程管理而不是 systemd。由于我在“一般谷歌搜索”上没有找到令人满意的答案,我想,让我们在这里尝试一下。
systemd-unit我的系统上有一个已启用。问题是,重新启动后它不会重新启动。它依赖于其他两个按预期启动的服务。
该服务是已知的、启用的和死的:
[centos@ansible-kube-4 ~]$ sudo systemctl status flanneld
flanneld.service - Flanneld overlay address etcd agent
Loaded: loaded (/usr/lib/systemd/system/flanneld.service; enabled)
Active: inactive (dead)
Run Code Online (Sandbox Code Playgroud)
单元文件:
[centos@ansible-kube-4 ~]$ cat /usr/lib/systemd/system/flanneld.service
[Unit]
Description=Flanneld overlay address etcd agent
After=network.target
After=etcd.service
[Service]
Type=notify
Restart=always
RestartSec=3
EnvironmentFile=/etc/sysconfig/flanneld
EnvironmentFile=-/etc/sysconfig/docker-network
ExecStart=/usr/bin/flanneld -etcd-endpoints=${FLANNEL_ETCD} -etcd-prefix=${FLANNEL_ETCD_KEY} $FLANNEL_OPTIONS
ExecStartPost=/usr/libexec/flannel/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/docker
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
更新 1
dmesg 的输出:
$ dmesg | grep systemd
[ 1.312165] systemd[1]: systemd 208 running in system mode. (+PAM +LIBWRAP +AUDIT +SELINUX +IMA +SYSVINIT +LIBCRYPTSETUP +GCRYPT +ACL …Run Code Online (Sandbox Code Playgroud) 我有一个两部分的问题。
systemctl 脚本中@ 符号的意义是什么?
如何在 Fedora 16 中启动 vsftpd(在某些教程中,它的名称中似乎包含一个 @)?我已经完成了教程所说的一切,但它仍然给我一个错误。 http://blog.tuxforge.com/fedora-16-vsftpd/
我所做的
systemctl enable vsftpd@.service
Run Code Online (Sandbox Code Playgroud)
我所看到的
Failed to issue method call: No such file or directory
Run Code Online (Sandbox Code Playgroud)
(我也用绝对路径试过,我检查后没有这样的文件。真正的文件不包含@符号,位于/lib/systemd/system/目录下。我也试过使用和不使用@ 符号启动和启用,启用有效,但启动没有。我意识到这篇文章现在已经过时,但我似乎仍然无法启动服务。当我尝试连接时,它不允许我)
编辑:我让服务以某种方式启动,但我仍然想知道 @ 符号在某些服务名称中的含义。此外,我仍然收到登录错误编号 #500 无法更改目录 [...],这是什么意思?
要开始它,我只是输入
sudo systemctl enable vsftpd.service
sudo systemctl start vsftpd.service (the problem was I was using an absolute path for this I think)
Run Code Online (Sandbox Code Playgroud)