systemd start stop은 하나의 대상 장치를 사용하여 여러 서비스를 활성화 및 비활성화합니다.

systemd start stop은 하나의 대상 장치를 사용하여 여러 서비스를 활성화 및 비활성화합니다.

대상 파일 /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

그 목적은 대상 /etc/systemd/system/에 지정된 모든 systemd 템플릿 서비스를 시작, 중지, 활성화 또는 비활성화할 수 있는 것입니다.[이메일 보호됨]

[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시에 컴퓨터가 자동으로 깨어나 서비스를 중지하도록 설정합니다. (컴퓨터에 동기화가 필요하다고 표시되면 3시쯤에 다른 컴퓨터와 동기화하는 cronjob이 있습니다. 컴퓨터를 사용하지 않을 때는 자동으로 종료됩니다. 이렇게 하면 내 컴퓨터에서 작업하고 /home / 또는 /stream/이 변경된 다음에만 동기화가 자동으로 시작됩니다.)

내 문제는 내 목표를 완전히 달성할 수 없다는 것입니다. 아무런 문제 없이 대상을 시작하거나 중지할 수 있습니다. 이는 두 "하위" 장치가 모두 실행 중임을 의미합니다. 활성화하면 경고가 표시되지 않고 /etc/systemd/system/watch-for-sync-need-all.target.wants 디렉터리에 해당 링크가 생성되지만 내 컴퓨터가 부팅될 때 "sub" 장치가 실행되지 않습니다. 새로 부팅하면 다음과 같은 결과가 나타납니다.

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가 대상(모든 "하위" 장치)을 시작하도록 하려면 어떻게 해야 합니까?

답변1

/etc/systemd/system/watch-for-sync-need-all.target의 설치 섹션에서 multi-user.target을 WantedBy로 추가해야 했으며 이제 작동합니다. 이 스택 오버플로 스레드에서여러 execStart로 시스템화됨 Johny의 의견 5에서는 이에 대해 언급합니다.

이것이 왜 필요한지 이해가 되지 않습니다. 왜냐하면 내가 아는 한 시스템 시작 시 활성화를 포함하여 대상에 대한 모든 작업을 설명하는 단위 섹션에 정의된 대로 multi-user.target 이후에 대상이 시작되어야 하기 때문입니다.

어쨌든, 이 게시물과 답변이 도움이 되기를 바랍니다.

관련 정보