AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-320846

bejo's questions

Martin Hope
bejo
Asked: 2022-03-09 13:34:33 +0800 CST

systemd start stop 使用一个目标单元启用和禁用多个服务

  • 1

我创建了一个目标文件 /etc/systemd/system/watch-for-sync-need-all.target

[Unit]
Description=systemd target to group services for all folders that create a sync need by changes
After=multi-user.target
Wants=watch-for-sync-need@_sl_home_sl_.service
Wants=watch-for-sync-need@_sl_stream_sl_.service

[Install]
Also=watch-for-sync-need@_sl_home_sl_.service
Also=watch-for-sync-need@_sl_stream_sl_.service

其目的是能够启动、停止、启用或禁用所有在目标指定的systemd模板服务/etc/systemd/system/[email protected]

[Unit]
Description=watch sync folders for changes then flag sync need and set rtcwake
BindsTo=watch-for-sync-need-all.target
After=watch-for-sync-need-all.target

[Service]
User=root
Group=root
Type=simple
ExecStart=/bin/bash /etc/custom/notify-on-change %i
Restart=on-failure
RestartSec=3

[Install]
WantedBy=watch-for-sync-need-all.target

如果它必须处理我的问题,我会发布 /etc/custom/notify-on-change 的调用脚本内容

#! /usr/bin/env bash

inotifywait -q -m -r -e modify,delete,create "${1//_sl_//}" | while read DIRECTORY EVENT FILE
do
    echo "yes" > /etc/custom/log/sync-needed
    bash /etc/custom/set-rtcwake
    systemctl stop watch-for-sync-need-all.target
done

如果文件夹 /home/ 或 /stream/ 发生更改,inotifywait 会注意到,标记同步需求,在即将到来的晚上 3 点设置计算机自我唤醒并停止服务。(如果标记了同步需要,则机器上有一个 cronjob 会在 3 点钟后的几分钟内同步到另一台计算机。计算机在不使用时会自行关闭。这样,我可以在我的计算机上工作并制作/home/ 或 /stream/ 中的更改,然后并且只有在那时才会自动开始同步。)

我的问题是,我无法充分启用我的目标。可以毫无问题地启动或停止目标。这意味着,两个“子”单元都在运行。启用不会发出任何警告并在目录 /etc/systemd/system/watch-for-sync-need-all.target.wants 中创建相应的链接,但是当我的机器启动时,“子”单元没有运行。新启动后,我得到以下输出

systemctl status watch-for-sync-need-all.target 

watch-for-sync-need-all.target - systemd target to group services for all folders that create a sync need by ch>
Loaded: loaded (/etc/systemd/system/watch-for-sync-need-all.target; indirect; vendor preset: enabled)
Active: inactive (dead)`enter code here`

或者

systemctl status watch-for-sync-need@_sl_home_sl.service

watch-for-sync-need@_sl_home_sl.service - watch sync folders for changes then flag sync need and set rtcwake
Loaded: loaded (/etc/systemd/system/[email protected]; disabled; vendor preset: enabled)
Active: inactive (dead)

如何让 systemd 在系统启动时启动目标(所有“子”单元)?

systemd startup
  • 1 个回答
  • 385 Views
Martin Hope
bejo
Asked: 2021-12-30 12:43:44 +0800 CST

有时在 serverstart 后突然关闭,然后在大约 5 分钟后自动重启

  • 0

我通过网络唤醒唤醒我的家庭服务器。大多数时候,大约 45 秒后,我可以使用 ssh 连接到机器。那很好。看来,上次登录是在更长的时间之前(几个小时),大约 45 秒后我无法立即访问服务器。我必须再等大约 5 分钟才能进入。我在 /var/log/ 中没有找到任何提示。这是我可以观察到的:

ME@Laptop:~$ date
Wed 29 Dec 2021 07:04:57 PM CET

ME@Laptop:~$ wakeonlan 17:F2:42:54:04:A6
Sending magic packet to 255.255.255.255:9 with 17:F2:42:54:04:A6

ME@Laptop:~$ ping 192.168.0.201
PING 192.168.0.201 (192.168.0.201) 56(84) bytes of data.
From 192.168.0.22 icmp_seq=1 Destination Host Unreachable
From 192.168.0.22 icmp_seq=2 Destination Host Unreachable
...
From 192.168.0.22 icmp_seq=35 Destination Host Unreachable
From 192.168.0.22 icmp_seq=36 Destination Host Unreachable
64 bytes from 192.168.0.201: icmp_seq=38 ttl=64 time=8.96 ms       <--- There it is shortly
From 192.168.0.22 icmp_seq=78 Destination Host Unreachable         <--- ... and gone!
From 192.168.0.22 icmp_seq=79 Destination Host Unreachable
...
From 192.168.0.22 icmp_seq=361 Destination Host Unreachable
From 192.168.0.22 icmp_seq=362 Destination Host Unreachable
64 bytes from 192.168.0.201: icmp_seq=363 ttl=64 time=1352 ms
64 bytes from 192.168.0.201: icmp_seq=364 ttl=64 time=329 ms
...
64 bytes from 192.168.0.201: icmp_seq=389 ttl=64 time=2.03 ms
64 bytes from 192.168.0.201: icmp_seq=390 ttl=64 time=4.15 ms
^C
--- 192.168.0.201 ping statistics ---
390 packets transmitted, 29 received, +273 errors, 92.5641% packet loss, time 1100ms
rtt min/avg/max/mdev = 1.714/62.398/1352.149/250.840 ms, pipe 4

ME@Laptop:~$ ssh S02
ME@s02's password: 
Linux S02 4.19.0-18-amd64 #1 SMP Debian 4.19.208-1 (2021-09-29) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Wed Dec 29 11:28:52 2021 from 2001:4dd7:2e8c:0:61de:9f:e12f:ba74

ME@Server:~$ sudo shutdown now
[sudo] Passwort für ME: 
Connection to s02 closed by remote host.
Connection to s02 closed.

ME@Laptop:~$ ping 192.168.0.201
PING 192.168.0.201 (192.168.0.201) 56(84) bytes of data.
^C
--- 192.168.0.201 ping statistics ---
12 packets transmitted, 0 received, 100% packet loss, time 262ms

ME@Laptop:~$ date
Wed 29 Dec 2021 07:12:53 PM CET

ME@Laptop:~$ wakeonlan 17:F2:42:54:04:A6
Sending magic packet to 255.255.255.255:9 with 17:F2:42:54:04:A6

ME@Laptop:~$ ping 192.168.0.201
PING 192.168.0.201 (192.168.0.201) 56(84) bytes of data.
From 192.168.0.22 icmp_seq=1 Destination Host Unreachable
From 192.168.0.22 icmp_seq=2 Destination Host Unreachable
...
From 192.168.0.22 icmp_seq=38 Destination Host Unreachable
From 192.168.0.22 icmp_seq=39 Destination Host Unreachable
64 bytes from 192.168.0.201: icmp_seq=40 ttl=64 time=493 ms          <--- There it is and it stays on!!!
64 bytes from 192.168.0.201: icmp_seq=41 ttl=64 time=1.67 ms
...
64 bytes from 192.168.0.201: icmp_seq=264 ttl=64 time=2.09 ms
64 bytes from 192.168.0.201: icmp_seq=265 ttl=64 time=2.82 ms
^C
--- 192.168.0.201 ping statistics ---
265 packets transmitted, 226 received, +39 errors, 14.717% packet loss, time 512ms
rtt min/avg/max/mdev = 1.631/5.289/493.460/32.711 ms, pipe 4

ME@Laptop:~$ date

怎么解释我的系统突然死机了。如何解释它在大约 5 分钟后神奇地重新启动?我在哪里可以查看正在发生的事情?我强烈认为这不是温度问题,因为它只发生在我几个小时后冷启动机器时。通过手动关闭并在不需要的重新启动后立即启动,似乎不再有问题。

debian shutdown
  • 1 个回答
  • 51 Views
Martin Hope
bejo
Asked: 2019-04-14 06:40:41 +0800 CST

/dev/disk/by-uuid下的短uuid和长uuid

  • 3

我的系统上有几个硬盘分区(Linux josDeb 4.9.0-8-amd64 #1 SMP Debian 4.9.144-3.1 (2019-02-19) x86_64 GNU/Linux)。它正在与:

bejo@josDeb:~$ ls -l /dev/disk/by-uuid

产量:

total 0
lrwxrwxrwx 1 root root 10 Apr 13 16:20 00FB-604A -> ../../sdb1
lrwxrwxrwx 1 root root 10 Apr 13 16:19 4425-7572 -> ../../sda1
lrwxrwxrwx 1 root root 10 Apr 13 16:19 8dc07aba-5729-4525-883f-09c32d1a9e98 -> ../../sda2
lrwxrwxrwx 1 root root 10 Apr 13 16:19 95a8efff-92d2-4e31-8632-bf7a640e100f -> ../../sda3
lrwxrwxrwx 1 root root 10 Apr 13 16:19 f5a05b5e-c3ed-4227-bb62-fe4576b72643 -> ../../sda4

有些分区 uuid 很长,有些很短。我想了解为什么。我想,uuid 总是有 16 个字节。为什么我有不同大小的 uuid?

disk block-device
  • 1 个回答
  • 2350 Views
Martin Hope
bejo
Asked: 2018-12-10 14:29:20 +0800 CST

systemd 调用 bash 脚本在守护进程之前创建符号链接

  • 0

在 systemd 执行守护进程之前,我需要创建或更改符号链接的目标。守护进程将其标准输出重定向到此符号链接,并随之重定向到每个启动的守护进程的特殊文件中。这就是想法。我设置了名为“test_start.service”的服务单元文件:

[Unit]
Description=Test Server
After=network-online.target test_start.socket
Requires=network-online.target test_start.socket

[Service]
User=test1
Group=test1
Type=simple
ExecStartPre=/bin/bash /etc/testServer/Debug/makeOutfile.sh
ExecStart=/etc/testServer/Debug/testServer
StandardInput=socket
StandardOutput=file:/etc/testServer/Debug/test_outLink
Restart=on-failure
RestartSec=3

[Install] 
WantedBy=multi-user.target

bash 脚本“/etc/testServer/Debug/makeOutfile.sh”如下所示:

#!/usr/bin/env bash
timeStamp=$(date +%y-%m-%d_%Hh%Mm%Ss)
myfolder="/etc/testServer/Debug"
# create new logfile
touch $myfolder/started_$timeStamp
# remove old symlink if exists (owned by test1)
if [ -h $myfolder/test_outLink ]; then
    rm $myfolder/test_outLink
fi
# create new symlink
ln -s $myfolder/started_$timeStamp $myfolder/test_outLink

它在某些情况下有效。如果符号链接存在并且它指向的文件也存在,那么一切都很好。bash 脚本“makeOutfile.sh”通过终端运行以进行测试,并通过 systemd 服务启动。

但:

如果指向的文件(名称:“started_atSomeDate”)不存在(因为它同时被某人删除),则脚本的终端调用按预期工作,但启动 systemd 服务将添加一个由 root 拥有的附加文件和组具有原始旧文件名的根:“started_atSomeDate”。

那是从哪里来的?

如果旧符号链接“test_outLink”不存在(因为它同时被某人删除),脚本的终端调用按预期工作,但启动 systemd 服务会将新创建的“test_outLink”添加为 root 拥有的常规文件使用组 root 并且服务无法启动。

这里出现了严重错误,虽然 systemd 服务单元用户和组是 test1,但 root 在这里混在一起。谁能解释一下?我究竟做错了什么?

linux bash
  • 1 个回答
  • 672 Views
Martin Hope
bejo
Asked: 2018-12-07 09:25:57 +0800 CST

systemd 仅在崩溃后自动重启服务

  • 6

只有当服务没有返回 0 时,是否可以让 systemd 自动重启服务?据我所知,当一个正确的结束发生时,服务返回 0——比如当用户像关闭程序一样主动终止服务时。当它被手动终止时,我很想告诉 systemd 不要重新启动服务。那可能吗?

linux systemd
  • 1 个回答
  • 8731 Views
Martin Hope
bejo
Asked: 2018-11-14 15:47:29 +0800 CST

使用“系统”用户启动 systemd 服务以执行 bash 脚本

  • 2

出于测试目的,systemd 服务文件旨在执行一个简单的 bash 脚本。我希望该服务由“系统”用户启动。bash 脚本归该系统用户所有,并已授予执行权限。

服务文件很简单:

[Unit]
Description=Come one step closer
After=network-online.target
Requires=network-online.target

[Service]
User=test1
Group=test1
Type=simple
ExecStart=/usr/bin/bash /absolute/path/to/test.sh

[Install] 
WantedBy=multi-user.target

test.sh 脚本应该简单地向 journalctl 发出一条消息——它只是为了测试。

我重新加载了 systemd 单元文件:

$ sudo systemctl daemon-reload

我开始服务:

$ sudo systemctl start tester.service

systemctl status tester.service 的输出表明没有执行 bash 的权限。

我将这样的“系统”用户 test1 添加到系统中:

$ sudo useradd -r -s /usr/bin/bash test1 -U

我需要为用户 test1 做什么才能获得启动服务的权限。我无法使用用户 test1 测试 bash 脚本,因为 test1 是系统用户,我无法以 test1 身份登录。

systemd permissions
  • 1 个回答
  • 4159 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve