systemd有用的一些内容

systemd有用的一些内容

在使用systemd作为系统和服务管理器的Linux系统中,你可以通过多种方式查看已启用的服务。systemd使用systemctl命令来管理系统和服务。以下是一些查看已启用服务的方法:

1. 常见用法

1.1. 查看所有已启用的服务

要列出所有在系统启动时自动启动(即已启用)的服务,你可以使用systemctl list-unit-files --type=service --state=enabled命令。这个命令会列出所有设置为在启动时自动启动的服务单元。

systemctl list-unit-files --type=service --state=enabled

1.2. 过滤查看特定服务

如果你只对某个特定的服务是否已启用感兴趣,你可以使用grep命令来过滤输出结果。例如,要检查httpd(Apache HTTP服务器)服务是否已启用,你可以这样做:

systemctl list-unit-files --type=service --state=enabled | grep httpd

1.3. 查看服务的状态

虽然这不是直接查看服务是否已启用,但systemctl status命令可以提供关于服务当前状态(包括是否正在运行以及是否设置为在启动时自动启动)的详细信息。如果你对某个服务的具体状态感兴趣,可以使用此命令:

systemctl status httpd

在输出中,你会看到Loaded:行,它指示了服务的启用状态(例如,loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)表示服务已启用)。

1.4. 查看特定目标(target)下的已启用服务

systemd使用目标(targets)来定义系统运行状态,类似于传统的运行级别(runlevels)。你可以查看特定目标下已启用的服务。首先,使用systemctl list-units --type=target --all列出所有可用的目标,然后选择一个目标,并使用systemctl list-dependencies来查看该目标下的所有服务(包括已启用的服务):

systemctl list-units --type=target --all
# 假设你选择了 multi-user.target
systemctl list-dependencies multi-user.target

注意,list-dependencies命令会列出目标依赖的所有单元,包括服务、挂载点等,而不仅仅是服务。如果你只对服务感兴趣,你可能需要结合使用grep来过滤输出。

1.5. 总结

查看systemd系统中已启用的服务主要依赖于systemctl list-unit-files命令,结合适当的选项和过滤,你可以轻松地找到你需要的信息。

2. systemd开机启动服务,以iptable为例

原始的命令为 sudo iptables -t nat -A POSTROUTING -o wlp3s0 -j MASQUERADE

在systemd中创建一个服务来启动一个脚本,该脚本包含iptables命令以设置NAT规则,需要注意几个关键点:

  1. 使用iptables而非sudo iptables:在systemd服务中直接运行需要sudo权限的命令通常不是一个好主意,因为systemd服务通常是以特定用户(如root或某个特定用户)身份运行的。你应该确保systemd服务以root用户身份运行,这样它就可以直接执行iptables命令而无需sudo

  2. 脚本的权限:确保你的脚本文件是可执行的,并且位于一个安全的、只有root用户或适当权限的用户可以访问的位置。

  3. systemd服务文件:你需要创建一个systemd服务文件来描述你的服务,包括它要执行的脚本。

以下是一个示例步骤,展示如何创建一个systemd服务来在启动时运行一个包含iptables NAT规则的脚本:

2.1. 第一步:创建脚本

首先,创建一个脚本文件,比如叫setup-nat.sh,并给它可执行权限:

sudo vim /srv/all/backup/setup-nat.sh

在文件中写入以下内容:

ivo@debian:/srv/all/backup$ sudo chmod +x /srv/all/backup/setup-nat.sh
ivo@debian:/srv/all/backup$ cat /srv/all/backup/setup-nat.sh
#!/bin/bash

# 设置NAT规则
iptables -t nat -A POSTROUTING -o wlp3s0 -j MASQUERADE

# 注意:MASQUERADE可能是MASQUERADE的误写,通常使用MASQUERADE是为了动态IP地址的NAT
# 如果你确定你的环境需要MASQUERADE,并且了解它的含义,那么可以使用它
# 但通常,你可能想要使用SNAT来指定一个源IP地址
# 例如:iptables -t nat -A POSTROUTING -o wlp3s0 -j SNAT --to-source <你的公网IP>

2.2. 第二步:创建systemd服务文件

接下来,创建一个systemd服务文件来描述你的服务:

sudo vim /etc/systemd/system/setup-nat.service

在文件中写入以下内容:

[Unit]
Description=Setup NAT rules on boot
After=network.target

[Service]
Type=oneshot
ExecStart=/srv/all/backup/setup-nat.sh
[Install]
WantedBy=multi-user.target

保存并退出编辑器。

2.3. 第三步:启用并启动服务

现在,你需要启用并启动你的systemd服务:

sudo systemctl daemon-reload
sudo systemctl enable setup-nat.service
sudo systemctl start setup-nat.service

systemctl daemon-reload命令用于重新加载systemd的配置文件,以确保它识别到你的新服务。

systemctl enable命令用于在系统启动时启用该服务。

systemctl start命令用于立即启动该服务。

2.4. 注意事项

  • 确保wlp3s0是你想要设置NAT规则的正确网络接口名称。
  • 如果你使用的是静态IP地址,并且想要进行源地址转换(SNAT),请考虑将MASQUERADE替换为SNAT并指定一个源IP地址。
  • 如果你在脚本中遇到权限问题(尽管在这个例子中我们假设服务以root身份运行),请检查systemd服务的用户设置(在[Service]部分中的User=Group=选项)。但是,对于设置iptables规则来说,通常不需要更改这些设置,因为iptables命令需要root权限。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇