크로나

크로나

최근 누군가가 나에게 cron에 대한 대안, 즉 시스템 타이머가 있다고 지적했습니다.

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

조금Arch Wiki에서의 토론. 그러나 나는 cron장단점에 초점을 맞춰 systemd 타이머와의 자세한 비교를 찾고 있습니다 . 저는 Debian을 사용하지만 두 가지 대안을 모두 사용할 수 있는 모든 시스템을 전반적으로 비교하고 싶었습니다. 이 세트에는 Linux 배포판만 포함될 수 있습니다.

이것이 내가 아는 것입니다.

크론은 1970년대 후반으로 거슬러 올라가 매우 오래되었습니다. cron의 원저자는 Unix의 창시자인 Ken Thompson입니다. 최신 Linux 배포판의 cron은 1987년으로 거슬러 올라가는 Vixie cron의 직계 후손입니다.

Systemd는 더 새롭고 다소 논란의 여지가 있습니다. Wikipedia에 따르면 첫 출판 날짜는 2010년 3월 30일이었습니다.

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

  1. Cron은 설치 가능하고 지원되는 소프트웨어라는 점에서 모든 Unix 계열 시스템에 존재하도록 보장됩니다. 이것은 변하지 않습니다. 대조적으로, systemd는 향후 Linux 배포판에 남아 있을 수도 있고 남지 않을 수도 있습니다. 이는 기본적으로 초기화 시스템이며 다른 초기화 시스템으로 대체될 수 있습니다.

  2. 크론은 사용이 간단합니다. 시스템 타이머보다 확실히 간단합니다.

cron에 비해 systemd 타이머의 장점 목록은 다음과 같습니다.

  1. 시스템 타이머는 더 유연하고 강력할 수 있습니다. 하지만 몇 가지 예를 들어보고 싶습니다.

따라서 요약하면 답변에서 다음 중 일부를 보는 것이 좋을 것입니다.

  1. cron 타이머와 systemd 타이머의 자세한 비교(각 사용의 장단점 포함)
  2. 한 사람은 할 수 있지만 다른 사람은 할 수 없는 일의 예입니다.
  3. 최소한 cron 스크립트와 시스템 타이머 스크립트를 나란히 비교하십시오.

답변1

이 두 가지에 대한 몇 가지 핵심 사항은 다음과 같습니다.:

  1. 크론 작업이 정확히 무엇을 하고 있는지 확인하는 것은 다소 혼란스러울 수 있지만, 모든 systemd 타이머 이벤트는 다른 이벤트 기반 systemd 단위처럼 systemd 로그에 주의 깊게 기록되므로 작업이 더 쉬워집니다.

  2. systemd 타이머는 리소스 관리, IO CPU 스케줄링 등의 모든 기능을 갖춘 systemd 서비스입니다.
    목록은 다음과 같습니다.

    • 시스템 호출 필터
    • 사용자/그룹 ID
    • 회원 관리
    • 돈의 가치
    • OOM 점수
    • IO 스케줄링 카테고리 및 우선순위
    • CPU 스케줄링 전략CPU
    • 어피니티 마스크
    • 타이머 캐주얼 바지
    • 안전한 비트
    • 네트워크 액세스 및...
  3. 다른 시스템 서비스와 마찬가지로 종속성 옵션을 사용하여 활성화 시간을 신뢰할 수 있습니다.

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

  5. 필요에 따라 다양한 사용자 정의를 위해 시스템 타이머를 사용하도록 일부 파일과 직접 태그를 구성하는 것이 더 쉽습니다.

  6. 다음을 통해 전체 기능을 쉽게 활성화/비활성화할 수 있습니다.

    systemctl enable/disable 
    

    그리고 일하는 아이들을 모두 죽여라:

    systemctl start/stop
    
  7. systemd 타이머는 달력과 단조로운 시간을 사용하여 예약할 수 있습니다. 이는 시간대가 다를 때 유용합니다.

  8. systemd 시간 이벤트(캘린더)가 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 사용량 관점에서 시스템 타이머는 경과 시간이 지나면 CPU를 깨우지만 cron은 이 작업을 더 자주 수행합니다.

  11. 실행이 완료되는 시점을 기준으로 타이머 이벤트를 예약할 수 있으며 실행 간에 약간의 지연을 설정할 수 있습니다.

  12. 다른 프로그램과의 통신도 주목할 가치가 있습니다. 때로는 다른 프로그램이 타이머 상태와 해당 작업을 알아야 할 수도 있습니다.

답변2

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

위 페이지에서 발췌:

혜택

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

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

지침

cron으로는 쉽게 할 수 있지만 타이머 장치만으로는 하기 어려운 일들이 있습니다.

  • 복잡성: systemd를 사용하여 cron 작업을 설정하려면 두 개의 파일을 만들고 여러 systemctl 명령을 실행해야 합니다. 이것을 crontab에 행을 추가하는 것과 비교해 보세요.
  • 이메일: 작업 실패 시 이메일을 보내기 위해 cron의 MAILTO와 동일한 기능이 내장되어 있지 않습니다. OnFailure=를 사용한 동등한 설정의 예는 다음 섹션을 참조하세요.

답변3

내가 가져갈게최근에 언급한 POP3 예제댓글에. POP3에서는 새 메일 도착을 알릴 방법이 없기 때문에 이는 좋은 예입니다. (IMAP 액세스의 경우아니요실제로 IMAP이 있으므로 타이머 솔루션을 사용하십시오.할 수 있는알림! )

크로나

crontab -e

-e편집자를 대신하여. 참고: 옵션 없이 실행하면 도움이 되지 않지만 저장하지 않고 편집기를 종료할 수 없는 경우 기존 크론 작업이 모두 플러시됩니다. — 기존 과제가 있는 경우 이는 확실히 작업 손실을 의미합니다.

따라서 편집 모드에서 다음 줄을 추가하십시오.

30 14,21 * * * mpop --quiet

mpop오후 2시 30분, 오후 9시 30분에 이용 가능합니다.

이론적으로는 편집도 가능 /var/spool/cron/crontabs/username하지만 대부분의 크론은 눈치채지 못합니다.그리고디렉터리 권한은 일반적으로 파일에 대한 직접 액세스를 허용하지 않습니다.

Cron 작업은 디버그하기에 덜 재미있습니다. 일반적으로 이를 신뢰하고 빈도가 올바르게 설정될 때까지 매분마다 일정을 예약하게 됩니다.

그렇지 않으면 반복 작업을 위한 매우 빠른 인터페이스입니다.

요즘에는 cron 데몬이 실행되지 않더라도 놀라지 마십시오. 패키지 systemd-cron(적어도 Debian의 경우)는 cron 사용자 인터페이스가 있는 시스템 타이머를 제공합니다. 이 패키지는 crontab 줄을 투명하게 변환하며 명령줄 도구는 동일합니다. —그 반대는 결코 존재할 수 없습니다.

시스템 타이머

loginctl enable-linger

한 번만 실행해야 하며 다시는 실행하지 않아야 합니다. 부팅 시 사용자 모드 systemd가 시작되도록 보장합니다. 그렇지 않으면 첫 번째 로그인에서 시작됩니다.

systemctl --user edit --full --force mpop.service

systemctl edit mpop.service다음을 실행 하여 지속적인 오류 스트림을 얻고 옵션을 사용하여 올바른 명령줄로 안내하는 메시지를 표시 할 수도 있습니다 .

No files found for mpop.service.
Run 'systemctl edit --force --full mpop.service' to create a new unit.

제안된 명령을 실행하면 파일 쓰기 권한 문제가 드러나고 시스템 데몬을 다시 로드하려면 암호가 필요합니다. - 이 시점 --user에서 사용자의 systemd 인스턴스와 대화를 추가하는 것을 기억해야 합니다 . 참고: 시스템 인스턴스를 선택할 수도 있지만 여기서는 이에 대해 설명하지 않습니다. 비슷합니다.

cron과 달리 파일에 직접 액세스할 수 있지만 ~/.config/systemd/user/mpop.service경로를 직접 기억해야 합니다. 그리고 어떤 경우에는 systemd --user daemon-reload필요합니다. 예를 들어 파일이 존재하는 경우그리고짐을 실은. systemd --user edit ...어떤 경우에도 데몬 다시 로드가 수행되므로 그럴 필요가 없습니다.

따라서 mpop.service파일에 다음을 추가하십시오.

[Service]
Type=oneshot
ExecStart=mpop --quiet

를 사용하여 테스트 실행해 볼 수 있습니다 systemctl --user start mpop. 여기의 약어 mpop입니다 .mpop.service

(약어)를 사용하여 세부 정보를 검토하거나 systemctl --user status mpop과거 실행의 출력을 완료합니다.journalctl --user -u mpop-u--unit

systemd의 경우 타이머는 서비스 단위를 트리거하는 또 다른 단위입니다.

만들다:

systemctl --user edit --full --force mpop.timer

편집기에 다음을 저장합니다.

[Timer]
OnCalendar=*-*-* 14,21:30:00

[Install]
WantedBy=timers.target

더 짧게 쓰셔도 됩니다 OnCalendar=. 활성화하기 위한 명시적인 쓰기가 없으므로 Unit=동일한 이름의 서비스가 사용됩니다.

서비스(단기)와 마찬가지로 타이머(장기)도 초기에는 꺼집니다. 서비스는 타이머에 의해 활성화되므로 걱정하지 마세요.

그러면 타이머를 활성화하는 것은 무엇입니까? - 여기서 [Install]이 부분이 작용하게 됩니다. 명령과 관련됩니다 systemctl --user enable/disable .... 불행히도 둘 다 이름이 좋지 않습니다.

내 생각에는 그렇지 않으며 대신 섹션 [Hooks]과 명령을 호출해야 합니다 ... hook/unhook .... 이유:

  • mpop.timer파일이 존재 하면서 타이머가 설치되었습니다.
  • 섹션과 명령 사이의 관계를 드러냅니다.
  • enable명령은 그렇지 않을 수도 있습니다~할 수 있게 하다장치가 사이딩 장치 또는 존재하지 않는 사이딩 장치에 연결된 경우(후자에 대한 경고 메시지가 표시됨) "활성화됨"으로 표시됩니다.
  • 장치 에는 부품이 mpop.service없고 아무 작업도 수행하지 않습니다. "활성화"되어 있어도 "정적"으로 나타납니다.[Install]enable/disable

그러면 WantedBy=후크가 일반적인 상황에서 시작되고 타이머에 사용해야 하는 잘 알려진 대상을 언급한다는 것을 알 수 있습니다.

지금 그리고 다음 단계를 수행한 후에 사용하여 systemctl --user list-dependencies default.target주변에서 어떤 일이 일어나는지 확인하십시오 timers.target.

systemctl --user enable mpop.timer  # hooks it into the timers.target
systemctl --user start timers.target  # this or reboot

나는 더 나은 실천보다는 start실행 을 고려합니다 (둘 다 유효합니다). 타이머 단위 섹션의 오타를 감지 하고 다시 시작되는 실행 경로에 가까워지는 데 도움이 됩니다.timers.targetmpop.timer[Install]

답변4

"systemd 타이머" 및 "cron"은 "systemd" 및 "SysV init"와 같습니다.

systemd를 둘러싼 끝없는 논쟁을 알고 계십니까? 종종 매우 주관적이고 매우 감정적입니다. 타당성 여부에 관계없이 찬반 주장의 대부분은 여기에서 거의 그대로 반복될 수 있습니다. 기술적 측면과 언뜻 기술적 측면으로 보이는 측면을 포함합니다.

나는 시스템 사용자가 cron을 통하지 않고는 데몬을 시작할 수 없었던 시절을 기억합니다. cron은 매분마다 실행되고 99.9%의 시간은 시스템이 재부팅될 경우 장기 실행 프로세스를 시작하는 것 외에는 아무것도 하지 않는 스크립트입니다.

요즘은 그게 더 궁금한데어느방금 설명한 사용 사례(예: @reboot 타이머)의 적용 범위를 확인하려면 cron을 실행하세요. (또는 예를 들어 누락된 작업을 실행하는 기능...)

타이머가 없어도 Systemd가 도와드립니다! –당신의사용 사례는 cron이나 타이머를 사용하지 않고 가장 잘 해결될 수도 있습니다.당신의사용 사례는 아마도 시스템 제공 후크를 통해 가장 잘 해결될 것입니다.

고쳐 쓰다:OP는 POP3 예제를 추가했습니다. —이제 이 질문에 답할 수 있습니다.

관련 정보