标签: systemd

正确启用systemd服务-fail2ban

老实说,我对使用 systemd 感到一点不舒服。我就是无法理解。

我使用的fail2ban版本在我的Ubuntu 16.04中表现得很奇怪。我删除了它:

apt remove fail2ban
Run Code Online (Sandbox Code Playgroud)

并安装了最后一个:

wget https://github.com/fail2ban/fail2ban/archive/0.11.zip
unzip 0.11.zip
cd fail2ban-0.11
python setup.py install
Run Code Online (Sandbox Code Playgroud)

在安装结束时,它说我必须启用它的服务。

我以为

systemctl enable fail2ban.service
Run Code Online (Sandbox Code Playgroud)

足够了,但服务似乎被“掩盖”了。我使用此链接:https://askubuntu.com/questions/710420/why-are-some-systemd-services-in-the-masked-state 来了解 masked 是什么。

我试图揭开它的面具: systemctl unmask fail2ban.service

并启用它:

systemctl enable fail2ban.service
Run Code Online (Sandbox Code Playgroud)

现在是经典命令:

service fail2ban status | start | stop
Run Code Online (Sandbox Code Playgroud)

工作中。

问题是,我读到我也应该能够从 systemctl 获取服务的信息:

systemctl fail2ban status
Unknown operation fail2ban.
Run Code Online (Sandbox Code Playgroud)

所以我开始谷歌搜索结果......我找到了这个命令(并且我添加了 | sort 以获得更好的输出):

systemctl list-units | sort
Run Code Online (Sandbox Code Playgroud)

这表明:

fail2ban.service  loaded active exited  LSB: Start/stop fail2ban
Run Code Online (Sandbox Code Playgroud)

我不知道“退出”是什么意思,所以我搜索: https ://unix.stackexchange.com/questions/241970/what-does-status-active-exited-mean-for-a-custom-service

状态活动(退出)意味着 systemd 已成功运行命令,但它不知道有一个守护进程需要监视。

我的请求: …

systemd

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

不是本机服务 systemd - 无法在启动时运行

我尝试使用以下方法将 NiFi 作为启动服务运行:

sudo systemctl enable nifi.service
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

nifi.service is not a native service, redirecting to systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable nifi
update-rc.d: error: nifi Default-Start contains no runlevels, aborting.
Run Code Online (Sandbox Code Playgroud)

本教程建议对 shell 文件进行更改,但我不使用这样的文件。任何帮助,将不胜感激。

debian boot systemd

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

在启动 systemd 服务之前执行命令

我想在每次启动服务之前执行一个脚本。

我知道我可以ExecStartPre在服务定义文件内部使用,但我想知道是否可以在不编辑来自服务包的文件的情况下实现。

该脚本是一个简单的命令,完成后退出,它创建主服务使用的文件(它从安全存储中获取 TLS 证书和密钥)。

systemd

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

如何教 systemd 检测服务进程是否已在运行?

有一个守护进程可以从命令行和 systemctl 启动。

/etc/systemd/system/mydaemon.service 包含 ExecStart= 和 PIDFile= 所以 Systemd 可以肯定地检测到该服务是否正在运行:

[Unit]
After=network-online.target

[Service]
Type=simple
ExecStart=/usr/local/bin/mydaemon --no-fork
PIDFile=/var/run/mydaemon-%i.pid

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

为什么“systemctl status mydaemon”说守护程序即使正在运行也已停止?

如何教 systemd 守护进程不仅可以通过“systemctl start”运行,还可以直接运行?

systemd

0
推荐指数
1
解决办法
3589
查看次数

Debian 9 Stretch 中是否有与“iptables-services”等效的软件包?

我想iptables通过iptables-save代替ufwor保存的良好的老式命令来管理我的防火墙firewalld。对于 RHEL,有一个简洁的小包iptables-services可以做到这一点。(请参阅此处)对于 Debian,似乎没有。

我只是可以打iptables-restore </etc/default/iptables进去/etc/rc.local然后离开它,但我想要一个更干净的设置。如果它可以作为 systemctl 单元出现,那将是理想的。

startup debian firewall iptables systemd

0
推荐指数
1
解决办法
3109
查看次数

如何配置 Systemd 服务单元以使用“npm start”而不是“app.js”启动 Node 应用程序

环境: CentOS 8、Node.js、Digital Ocean Droplet

我的 Systemd 设置使用以下命令启动节点应用程序。它按预期工作。

$ sudo systemctl start myapp
Run Code Online (Sandbox Code Playgroud)

文件 1: /etc/systemd/system/myapp.service

[Unit]
Description = My App 
After = network.target

[Service]
ExecStart = /root/start-myapp.sh
Restart=on-failure

[Install]
WantedBy = multi-user.target
Run Code Online (Sandbox Code Playgroud)

文件2: /root/start-myapp.sh

#!/bin/sh
/usr/bin/node /srv/myapp/app.js
Run Code Online (Sandbox Code Playgroud)

但是,当我不使用 Systemd 时,我通常会使用命令npm start. 我宁愿让 Systemd 单元也用npm start.

不幸的是扔了一个错误,当我换app.jsnpm start/root/start-myapp.sh

/usr/bin/node /srv/myapp/npm start
Run Code Online (Sandbox Code Playgroud)

我通过从切换路径作了一次尝试nodenpm,但它产生的同样的错误。

/usr/bin/npm /srv/myapp/npm start
Run Code Online (Sandbox Code Playgroud)

问题:如何让我的 Systemd 单元文件使用命令启动我的应用程序npm start

linux node.js systemd npm

0
推荐指数
1
解决办法
5340
查看次数

对非 root 用户隐藏 systemd 单元

我已经设置了许多自定义 systemd 服务单元,它们的环境变量中可能包含敏感数据。虽然非 root 用户无法使用systemctl cat该服务,但任何人都可以通过systemctl show. 这是不希望的,因为其他用户不应读取该数据。/etc/systemd/system 中的 *.service 文件被标记为只能由 root 读取(模式 600)。

我找不到任何有关 systemd 访问限制的信息。这可能吗?或者所有 systemd 数据都被认为是公开的并且全世界都可读吗?如果没有可用的安全性,我想我将不得不停止使用 systemd 功能并将所有内容包装在另一层无法访问的脚本文件中。

我当前的环境是Ubuntu Server 16.04和20.04。

security systemd

0
推荐指数
1
解决办法
418
查看次数

为什么 grep 在 /usr/lib/systemd/system 目录中不起作用?

前几天我在 RHEL7.1 系统上,我想在所有 systemd 单元文件所在的 /usr/lib/systemd/system 目录中搜索特定词。我像往常一样使用 grep 命令。看看发生了什么:

# cd /usr/lib/systemd/system
# grep After *
grep: invalid option -- '.'
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.
Run Code Online (Sandbox Code Playgroud)

然后,我尝试了 RHEL7.0、RHEL7.2、RHEL7.3 并得到了相同的结果。如果我在任何其他目录中使用 grep 命令,一切正常。谁能告诉我为什么我会有这种奇怪的行为?

grep systemd

-1
推荐指数
1
解决办法
879
查看次数

标签 统计

systemd ×8

debian ×2

boot ×1

firewall ×1

grep ×1

iptables ×1

linux ×1

node.js ×1

npm ×1

security ×1

startup ×1