크론 vs 시스템 타이머


83

cron에 대한 대안, 즉 시스템 타이머가 존재한다는 것이 최근에 지적되었습니다.

그러나 나는 시스템 타이머 또는 시스템 타이머에 대해 아무것도 모른다. 나는 cron 만 사용했습니다.

아치 위키 에는 약간의 토론 이 있습니다 . 그러나 cron장단점에 초점을 맞춘 시스템 타이머와 시스템 타이머 의 세부 비교를 찾고 있습니다. 데비안을 사용하지만이 두 가지 대안을 사용할 수있는 모든 시스템에 대한 일반적인 비교를 원합니다. 이 세트에는 Linux 배포판 만 포함될 수 있습니다.

여기 내가 아는 것입니다.

크론은 매우 오래되어 1970 년대 후반으로 거슬러 올라갑니다. cron의 최초 저자는 Unix의 제작자 인 Ken Thompson입니다. 현대 리눅스 배포판의 크론이 직접 후손 인 Vixie cron은 1987 년부터 시작되었습니다.

체계화는 훨씬 더 새롭고 논쟁의 여지가 있습니다. Wikipedia에 따르면 최초 릴리스는 2010 년 3 월 30 일이었습니다.

따라서 시스템 타이머에 비해 cron의 장점은 다음과 같습니다.

  1. Cron은 설치 가능한 지원 소프트웨어라는 의미에서 모든 유닉스 계열 시스템에 있어야합니다. 그것은 변하지 않을 것입니다. 반대로 systemd는 향후 Linux 배포판에 남아 있거나 남아 있지 않을 수 있습니다. 주로 init 시스템이며 다른 init 시스템으로 대체 될 수 있습니다.

  2. Cron은 사용하기 쉽습니다. 시스템 타이머보다 훨씬 간단합니다.

cron에 비해 시스템 타이머의 장점은 다음과 같습니다.

  1. 시스템 타이머는 더 유연하고 가능할 수 있습니다. 그러나 나는 그 예를 원합니다.

요약하면 다음과 같이 대답에서 볼 수있는 몇 가지 사항이 있습니다.

  1. 각각의 사용 장단점을 포함하여 크론 대 시스템 타이머의 세부 비교.
  2. 다른 사람이 할 수없는 일의 예.
  3. 크론 스크립트와 시스템 타이머 스크립트의 적어도 하나의 병렬 비교.

4
"Cron은 어떠한 유닉스 계열 시스템에서도 보장됩니다. 변경되지 않습니다." – 나는 이것을 강력하게 토론하고 싶습니다. 역사적으로 크론은 종종 유닉스 설치의 기본 설정에 포함되어 왔지만 오늘날 대부분의 시스템에서 단순히 임의의 선택적 소프트웨어 패키지입니다. 실제로, cron보다 선호 될 수있는 몇 가지 널리 사용되는 cron 대안 (예 : anacron, fcron, jobber)이 있습니다. cron의 기능은 systemd 또는 init와 같은 방식으로 시스템 작동에 필수적이지 않으므로 현재 및 미래의 이식성에 대해 염려되는 경우 내 베팅을하지 않습니다.
Guido

6
그것은 당신이 대답하고 싶은 것들의 목록입니다. 아마 당신은 시간을 내서 도구를 스스로 배우고 그 답을 스스로 공식화 할 수 있는지, 그리고 당신이 이해하지 못하는 특정한 것들이 있다면 , 여기에 물어보십시오.
larsks

5
실제로는 아닙니다. 나는 그 주제에 대해 말하고 싶은 모든 것을 말했습니다. systemd와 관련된 모든 것에 대한 확장 된 토론에 들어가는 것은 무의미한 것보다 더 나쁩니다. 어떤 사람들은 systemd가 가져 오는 사소한 이점이 리눅스 생태계의 독점적 가치가 있다고 생각합니다. 다른 사람들은 그렇지 않습니다.
cas

7
"크론은 매우 오래되어 1970 년대 후반으로 거슬러 올라갑니다." 시스템의 패키지가 적절하고 안정적인 방식으로 유지되는 한 사실은 정확하지만 완전히 관련이 없습니다. 태양도 매우 낡았지만 그것이 더 밝고 새로운 것으로 대체되어야한다는 것을 의미하지는 않습니다.
Otheus

5
@Otheus 나는 당신이 그 부분을 잘못 생각하고 있다고 생각합니다. 무언가가 오랫동안 주변에 있었다고 말하는 것은 모욕이 아닙니다. 최소한 많은 유닉스 사람들에게. 그것은 집이 수백 년 된 것이라고 말하는 것과 같습니다. 확실히 어떤 문제가 있고, 어떤 물건은 개조하면 이상 할 것이지만, 매력이 있으며, 잘 지어야합니다. 그 혐오를 말하는 것은 아닙니다. 40 년 동안 유용한 것으로 입증 된 간단한 도구입니다.
derobert

답변:


43

이 두 가지에 대한 몇 가지 사항이 있습니다 .

  1. cron 작업이 실제로 수행하는 작업을 확인하는 것은 다소 혼란 일 수 있지만 모든 시스템 타이머 이벤트는 이벤트를 기반으로 다른 시스템 장치와 마찬가지로 시스템 저널에 신중하게 기록됩니다.

  2. 시스템 타이머는 리소스 관리, IO CPU 스케줄링, ...에 대한 모든 기능을 갖춘 시스템 서비스입니다
    .

    • 시스템 콜 필터
    • 사용자 / 그룹 ID
    • 회원 통제
    • 좋은 가치
    • OOM 점수
    • IO 스케줄링 클래스 및 우선 순위
    • CPU 스케줄링 정책 CPU
    • 친 화성 umask
    • 타이머 여유
    • 안전한 비트
    • 네트워크 액세스 및 ...
  3. 다른 시스템 서비스와 마찬가지로 dependencies 옵션을 사용하면 활성화 시간에 의존 할 수 있습니다.

  4. 장치는 다른 방법으로 활성화 될 수 있으며, 조합을 구성 할 수도 있습니다. 서비스는 사용자, 부팅, 하드웨어 상태 변경 또는 일부 하드웨어 연결 후 5 분 등의 다른 이벤트에 의해 시작되고 트리거 될 수 있습니다.

  5. 시스템 타이머를 사용하여 사용자의 요구에 따라 다양한 사용자 정의를 수행하기 위해 일부 파일 및 직선 태그를 훨씬 쉽게 구성 할 수 있습니다.

  6. 다음을 사용하여 모든 것을 쉽게 활성화 / 비활성화하십시오.

    systemctl enable/disable 
    

    다음과 같이 직업의 모든 자녀를 죽이십시오.

    systemctl start/stop
    
  7. 시스템 타이머는 캘린더 및 단조로운 시간으로 예약 할 수 있으며 다른 시간대의 경우 실제로 유용 할 수 있습니다 ...

  8. 시스템 시간 이벤트 (달력)가 cron보다 정확합니다 (1 초 정밀도로 간주)

  9. 시스템 시간 이벤트는 되풀이되는 이벤트 또는 한 번 발생해야하는 이벤트에 대해 더 의미가 있습니다. 다음은 문서 의 예입니다 .

    Sat,Thu,Mon-Wed,Sat-Sun → Mon-Thu,Sat,Sun *-*-*00:00:00
      Mon,Sun 12-*-* 2,1:23 → Mon,Sun 2012-*-* 01,02:23:00
                    Wed *-1 → Wed *-*-01 00:00:00
            Wed-Wed,Wed *-1 → Wed *-*-01 00:00:00
                 Wed, 17:48 → Wed *-*-* 17:48:00 
    
  10. CPU 사용량 관점에서 systemd timer는 경과 시간에 CPU를 깨우지 만 cron이 더 자주 수행합니다.

  11. 실행 완료 시간을 기반으로 타이머 이벤트를 예약 할 수 있습니다. 실행간에 일부 지연을 설정할 수 있습니다.

  12. 다른 프로그램과의 통신은 주목할 만하 며 때로는 다른 프로그램이 타이머와 작업 상태를 알아야합니다.


2
좋은 노력입니다. 감사합니다. 그러나 예제를 포함하여 cron과의 직접적인 비교가 도움이 될 것입니다. 또한 여러분이 작성하는 내용 중 일부는 명확하지 않습니다. 예를 들어 "CPU 사용량 관점에서 systemd timer는 경과 시간에 CPU를 깨우지 만 cron은 더 자주 수행합니다."
Faheem Mitha

안녕하세요, @ F.sb! 당신의 대답은 다른 시간대를 사용하여 작업을 예약 할 수 있음을 의미하는 것 같습니다. 이 올바른지? 어떻게 하시겠습니까? cron의 표준 구현에 비해 상당한 이점이 있지만 man systemd.time모순되는 것을 제외하고는 정보를 찾을 수 없었 습니다 .UTC를 제외하고 로컬이 아닌 시간대는 지원되지 않습니다.
Tad Lispy

종속성이 편리합니다. 예를 들어 호스트 백업이 시스템 타이머로 실행되는 경우 종속성을 사용하여 백업 직전에 데이터베이스 내보내기가 완료되도록 할 수 있습니다.
vk5tu

6
좀 더 정직 해지십시오. 이것들에 대해 두 가지 점을 지적하면서 시작한 다음 선호하는 선택 의 장점을 계속 나열하십시오 . 당신이 선호하는 것은 나쁘지 않지만 먼저 그렇게 진술해야합니다. 그 꼭대기에, 사실이 있다고 모두 하나 개의 시스템에 찬성하고 시스템이 날이 대답이 비뚤어 느낌을 가지고있는 전문가에 보이지 않는다.
재스퍼

2
@jasper 친애하는 나는 내 필요에 따라 두 가지를 모두 사용하며 항상 귀하의 요구에 따라 하나를 선택하는 것이 당신의 선택입니다. 나는 단지 문서와 매뉴얼을 기반으로 한 사실을 언급했습니다.
F.sb

16

말의 입에서 곧바로 말하자면 https://wiki.archlinux.org/index.php/Systemd/Timers#As_a_cron_replacement

위 페이지에서 발췌 한 내용 :

혜택

타이머 사용의 주요 이점은 자체 시스템 서비스가있는 각 작업에서 비롯됩니다. 이러한 장점 중 일부는 다음과 같습니다.

  • 타이머와 관계없이 작업을 쉽게 시작할 수 있습니다. 이것은 디버깅을 단순화합니다.
  • 각 작업은 특정 환경에서 실행되도록 구성 할 수 있습니다 (systemd.exec (5) 참조).
  • 작업을 cgroup에 첨부 할 수 있습니다.
  • 다른 시스템 장치에 따라 작업을 설정할 수 있습니다.
  • 쉬운 디버깅을 위해 작업이 시스템 저널에 기록됩니다.

경고

cron으로하기 쉬운 것은 타이머 장치만으로는하기가 어렵습니다.

  • 복잡성 : systemd를 사용하여 시간이 지정된 작업을 설정하려면 두 개의 파일을 만들고 몇 개의 systemctl 명령을 실행하십시오. crontab에 한 줄을 추가하는 것과 비교하십시오.
  • 이메일 : 작업 실패시 이메일을 보내는 cron의 MAILTO에 해당하는 내장 기능이 없습니다. OnFailure =를 사용하여 동등한 것을 설정하는 예는 다음 섹션을 참조하십시오.

6
Errr ... 라이센스가 호환되지 않기 때문에 거의 완전히 복사하여 붙여 넣은 답변에 대해 어떻게 생각하는지 잘 모르겠습니다. 그러나 최소한 "다음 섹션 참조"부분을 수정해야합니다. 그 실수로, 당신은 당신이 복사하여 붙여 넣은 것을 읽지 않은 것처럼 느낍니다.
derobert

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