네트워킹이 시작되기 전에 시스템 서비스를 시작하는 방법은 무엇입니까?


11

네트워크 구성이 저장된 마운트를 설정 해야하는 새로운 서비스 (Debian Jessie에서)를 설정하려고하므로 네트워킹이 시작되기 전에이 서비스가 완료 되어야 합니다.

나는 다음을 시도했다.

[Unit]
Description=mount/repair remaining filesystems (all persistent fs beyond "/")
#Before=network-pre.target
Before=networking.service

[Service]
Type=oneshot
ExecStart=/opt/intermodul-mounts/start.sh
TimeoutSec=0
RemainAfterExit=yes

[Install]
RequiredBy=networking.service

를 사용하면 systemd-analyze plot서비스가 시작되지만 networking.service약 3 초 전에 시작 된다는 것을 알 수 있습니다 .

여기에 이미지 설명을 입력하십시오

분명히 내 구성이 잘못되었지만 문제를 찾는 데 어려움을 겪고 있습니다 ... 도움을 주시면 대단히 감사합니다 ..

최신 정보

나는 현재 local-fs.target대신에 시작하도록 서비스 구성을 변경하여 해결했습니다 networking.service.

[Unit]
DefaultDependencies=no
Description=mount/repair remaining filesystems (all persistent fs beyond "/")
Before=local-fs.target

[Service]
Type=oneshot
ExecStart=/opt/intermodul-mounts/start.sh
TimeoutSec=0
RemainAfterExit=yes

[Install]
RequiredBy=local-fs.target

여전히 첫 번째 구성이 예상대로 작동하지 않는 이유를 이해하고 싶습니다 ...?


체계적인 작동 방식으로 인해 일이 실행되는 문자적인 시간 순서는 중요하지 않을 수 있습니다. 네트워킹이 시작되면 해당 디렉토리의 파일과 일치합니까?
Tom Hunt

귀하의 질문을 이해하지 못했습니다. 어쨌든 다른 파티션에있는 스크립트에 /etc/network/interfaces대한 참조 ip-up가 있습니다. 그 파티션은 복잡한 스크립트에 의해 장착되어 있어야합니다 네트워킹이 설정되고 이전에 실행. 현재 스크립트는 부팅시 액세스 할 수 없으므로 효과적으로 시작되지 않습니다. 나중에 실행 하면 모든 인터페이스가 올바르게 나타납니다. /opt/intermodul-mounts/start.ship-upservice networking restart
Udo G

답변:


8

network-pre.target은 네트워크 인터페이스를 구성하기 전에 서비스를 주문하는 데 사용할 수있는 대상입니다. 주요 목적은 네트워크 인터페이스가 작동하기 전에 방화벽을 설정하려는 방화벽 서비스와 함께 사용하는 것입니다. 수동 장치입니다. 직접 시작할 수 없으며 네트워크 관리 서비스가 아니라 이전에 실행하려는 서비스에 의해 가져옵니다.

network-pre.target네트워크가 시작되기 전에 무언가를 설정 하려면 사용 하고 싶습니다

네트워크를 구성하기 전에 실행하려는 서비스는 Before = network-pre.target을 배치하고 Wants = network-pre.target을 설정하여 가져와야합니다.

다음 [Unit]섹션에 배치해야합니다 .

Before=network-pre.target
Wants=network-pre.target

참고


1
@ edwardtorvalds, 나는 일부 네트워크 구성 설정을 위해이 작업을 정확히 수행했지만 장치가 실행되지 않는 것으로 보입니다. 에 대한 답 systemctl is-enabled <unit>은 항상 static입니다. 물론이 없기 때문에 사용할 수 없습니다 WantedBy=. 결국, 그것은 무엇을 원합니까? 네트워크가로드되기 전에 일부 설정을 수행하는 것입니다.
deitch

= remote-fs.target 또는 mount-fs.target으로 원할 수 있습니다.
Edward Torvalds

2
감사. 나는 일을 결국 Before=network-pre.targetWants=network-pre.target과를 위해 [Install]우리는했다 WantedBy=network.target. 마지막 섹션은 네트워킹에 필요했고, 전자는 순서대로 정리했습니다. 그러나 고통이었다
deitch

내가하는 것보다 훨씬 더 체계적으로 머리를 가지고 있기 때문에 내가 가진 다른 질문을 볼 수 있습니까? unix.stackexchange.com/questions/277783/… 여전히 어떻게하는지 알아 내려고 노력하고 있습니다.
deitch

암호화 된 파티션에 대한 경험이 없기 때문에 혼란 스러워요. 간단하게 할 수 있다면
Edward Torvalds

3

데비안 Jessie에서와 같이 netfilter-persistent 패키지 (네트워크가 가동되기 전에 iptables 규칙을로드 할 수 있도록)에는 다음과 같은 netfilter-persistent.service 가 있습니다.

# https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/
# based on the netfilter-persistent package
[Unit]
Description=netfilter persistent configuration
DefaultDependencies=no

Before=network-pre.target
Wants=network-pre.target

Wants=systemd-modules-load.service local-fs.target
After=systemd-modules-load.service local-fs.target

Conflicts=shutdown.target
Before=shutdown.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/sbin/netfilter-persistent start
ExecStop=/usr/sbin/netfilter-persistent stop

[Install]
WantedBy=multi-user.target

왜와 충돌 shutdown.target합니까?!
Alexis Wilke

1

실수는 내가 항상 섞어 주요 것들 중 하나 간단하고 : 당신은 혼합 BeforeRequiredBy. 그것은 함께 가지 않습니다. 다른 사람들은 목표에 대해 정확합니다.


0
[Unit]
Description=mount/repair remaining filesystems (all persistent fs beyond "/")
DefaultDependencies=no
After=sysinit.target local-fs.target
Before=basic.target

[Service]
Type=oneshot
ExecStart=/opt/intermodul-mounts/start.sh
TimeoutSec=0
RemainAfterExit=yes

[Install]
WantedBy=basic.target

이 라인을 따라 무언가를 수행하면 네트워크 이전에 본 장치가 실행되었지만 다른 중요한 설정이 대부분 수행 된 후에야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.