2017-01-10 9 views
0

systemd이 실행되고 있지만 cron이 아닌 내장 된 대상 환경 (호스트 작성 환경과 별도)이 있습니다.5 분마다 실행되는 cron 작업을 대체하기 위해 systemd를 어떻게 사용합니까?

또한 대부분의 시스템에서 5 분마다 실행하기 위해 cron 항목을 작성하는 스크립트가 있습니다.

서비스systemd 아래에 만드는 방법을 알고 있지만이 스크립트는 작업을 마친 후에 종료되는 원샷입니다. 내가 뭘하고 싶은지 그것은 부츠 (물론 syslog.target 이후)에서 실행 후 5 분마다.

[Unit] 
Description=XYZZY 
After=syslog.target 

[Service] 
Type=simple 
ExecStart=/usr/bin/xyzzy.dash 

과 동등한 /lib/systemd/system/xyzzy.timer : 목표를 부팅 할 때

불행하게도
[Unit] 
Description=XYZZY scheduler 

[Timer] 
OnBootSec=0min 
OnUnitActiveSec=5min 

[Install] 
WantedBy=multi-user.target 

, 타이머가 표시되지 않습니다

systemd 타이머에 최대 읽은 후, 나는 다음과 같은 서비스 파일이 /lib/systemd/system/xyzzy.service입니다 생성 systemctl list-timers --all의 출력에 포함되지 않으므로 시작하십시오. 타이머 장치를 수동으로 시작하는 것은 정상적으로 작동하는 것으로 보이지만 사용자 개입을 통해 자동으로 실행되어야합니다.

WantedBy은 타이머 장치가 설치되어 실행되고 있는지 확인하여 주기적으로 서비스를 시작합니다. 그러나 multi-user.target.wants 디렉터리에 실제로 타이머에 대한 심볼 링크가없는 것으로 나타났습니다.

systemd에서 어떻게 이루어 집니까? 당신이 실제로 그것을 활성화 할 때까지

답변

1

타이머가 활성화되지 않습니다 :

systemctl enable xyzzy.timer 

을 당신이 재부팅하기 전에 어떻게 작동하는지보고 싶다면, 당신은 또한 그것을 시작할 수 있습니다

systemctl start xyzzy.timer 

을하는 측면에서 별도의 대상 환경에서 부팅시 임의의 명령을 쉽게 실행할 수있는 것은 아니지만 (파일 시스템 내용을 제어 할 가능성이 있음) 개발자 영역에서 동일한 심볼 링크를 만들면됩니다. enable 명령이 수행 할 수 있습니다. 예를 들어

이 (SYSROOT 가정하면 루트 대상 파일 시스템의 디렉토리 식별) :

ln -s ${SYSROOT}/lib/systemd/system/xyzzy.timer 
     ${SYSROOT}/lib/systemd/system/multi-user.target.wants/xyzzy.timer 

이 효과적으로 multi-user.target에 대한 활성화 된 상태로 타이머 장치를 넣어 것, 그래서 systemd는 목표로 시작됩니다 .


또한 일반적으로 사용자 지정 파일은 /etc/systemd/system/에 저장됩니다. 해당 lib 디렉토리는 패키지 또는 OS에 의해 설치된 파일 systemd을 호스트하기위한 디렉토리입니다.

그것은 당신의 cron 작업이 정확하게 5 분마다 를 실행하는 것이 중요합니다, 당신은 정확성을 확인해야합니다 오히려 성가신 systemd's monotonic timers can slip over time

+0

때문이다. 'systemd'의 모든 목적이 시작 활동을 다루는 것이라면 수동으로 시작하거나 다른 * 부팅 시간 기능을 사용해야합니다. 아마 내가 질문에 명확하게하지 않았지만 대상 환경은 개발과 분리되어 있으므로 대상에 영향을 미치지 않을 것이므로 내 장치 상자에서 실행하는 것은 단순한 문제가 아닙니다. 내가해야 할 일은 부팅 후 타겟이 개입없이 이것을하는지 확인하는 것이다. 'systemd'는 풍부한 단위 파일들에 기초하여 이것을 자체적으로 수행하지 않는 것처럼 보입니다. – paxdiablo

+0

시스템 문서에서 볼 수 있듯이,'enable' 부속 명령의 기능은 유닛 파일의'[Install]'섹션에서 명령을 실행하는 것입니다. 보통 이것은 부팅 할 때 자동으로 실행되도록 설정하는 것입니다. 유닛이 활성화되면 * 부팅 할 때마다 * 시작되며 수동 개입이 필요하지 않습니다. –

+0

마크, 분명하지 않은지 확신 할 수 없습니다. 그것은'systemd'가 유닛 파일의 절 (stanza)을 사용하여 완벽하게 수행 할 수 있어야합니다. 부트 타임에 알려진 위치에서 이러한 단위 파일을로드하면 * 이와 같은 옵션은 다른 방법에 의존하기보다는 대상 시스템에서 매우 중요합니다. 'systemd'가 타겟 파일 시스템에서 심볼릭 링크를 만드는 것 이외에 이것을 할 수있는 방법이 없다는 것을 알 수 있습니다. 나는 당신의 대답을 부인하는 것이 아니라 단지 그것이 단점이라고 말했습니다. – paxdiablo