집 >운영 및 유지보수 >리눅스 운영 및 유지 관리 >Crontab이 매초마다 작업을 실행하도록 만드는 방법
Crontab은 Linux의 예약 스케줄링 구성 파일입니다. 이를 통해 시스템의 프로그램, 스크립트, 명령 및 작업이 설정된 시간, 간격 및 주기에 따라 주기적으로 실행되도록 할 수 있습니다. Crontab에서 가장 작은 시간 단위는 분입니다. 즉, Crontab 구성을 통해 최대 1분에 한 번만 대상 작업을 실행할 수 있으며 더 자주 실행할 수는 없으며 다른 방법만 사용할 수 있습니다.
관련 학습 권장 사항: linux 비디오 튜토리얼
예를 들어, 프로그램이 30초마다 실행되도록 하려면 어떻게 해야 합니까?
아직 해결 방법이 있습니다. 한 가지 아이디어는 Crontab에 두 가지 구성을 추가하는 것입니다. 하나는 일반 예약을 위한 것이며 1분마다 실행되고, 다른 하나는 실행하기 전에 30초 동안 기다리는 것입니다.
# Need these to run on 30-sec boundaries, keep commands in sync. * * * * * /path/to/executable param1 param2 * * * * * ( sleep 30 ; /path/to/executable param1 param2 )
이 방법은 약간 뻣뻣하고 이상하게 느껴지지만 효과가 있습니다. 이 방법은 실제로 한 줄로 축약될 수 있습니다:
* * * * * /bin/bash -l -c "/path/to/executable; sleep 30 ; /path/to/executable"
또 다른 방법은 watch 명령을 사용하는 것입니다:
$ watch --interval .30 script_to_run_every_30_sec.sh
그러나 watch는 명령줄 도구이므로 nohup 명령을 사용하여 백그라운드에서 실행되도록 할 수 있습니다. .
우리가 사용하는 Linux 시스템에 SystemD가 있는 경우 SystemD 타이머를 사용하여 언제든지 세분성으로 프로그램을 예약할 수 있습니다. 이는 이론적으로 나노초 수준만큼 작을 수 있습니다. 물론 이것은 약간 미친 짓입니다. 간단히 말해서 작업 예약의 유연성은 Cron보다 훨씬 높습니다. sleep과 같은 형편없는 솔루션을 사용할 필요가 없습니다.
한 줄로 구성을 완료하는 crontab에 비해 SystemD 타이머를 설정하는 것은 약간 더 복잡하지만 '분당'보다 작은 단위로 스케줄링 작업을 더 잘 구현하려면 이 방법을 시도해 볼 가치가 있습니다.
SystemD 타이머의 구현 원리는 단순히 시스템 서비스와 SystemD 타이머의 두 부분으로 구성됩니다. SystemD 타이머는 스케줄링을 수행하고 작업은 서비스에 기록됩니다.
다음은 시스템 로거가 10초마다 "Hello World"를 출력하도록 하는 간단한 예입니다. helloworld.timer
[Unit] Description=Say Hello [Service] ExecStart=/usr/bin/logger -i Hello World전체 시스템에서 이 타이머를 사용하려면 이 두 파일을 /etc/systemd/system에 배치해야 합니다. 특정 사용자에게 사용하고 싶다면
~/.config/systemd/user에 넣어주세요. 이 타이머를 즉시 실행하려면 다음 명령을 실행해야 합니다.
[Unit] Description=Say Hello every 10 seconds [Timer] OnBootSec=10 OnUnitActiveSec=10 AccuracySec=1ms [Install] WantedBy=timers.targethelloworld.timer里并没有声明service的名称,那它和service是如何关联的呢?没错,因为它们的名称相同,都是helloworld。의
–now 표시를 사용하면 타이머가 즉시 실행됩니다. 그렇지 않으면 시스템이 다시 시작되거나 사용자가 로그인한 후에만 작업이 트리거됩니다. [Timer]
섹션의 각 필드의 기능은 다음과 같습니다.OnBootSec
– 시스템이 예약을 시작한 후 몇 초 후
OnUnitActiveSecsystemctl enable --now helloworld.timer마지막으로 기본값입니다. SystemD 타이머와 서비스가 동일한 이름으로 연결되어 있는 경우에는 [Timer] 구성에서 Unit 필드를 지정하여 쌍을 이룰 수도 있습니다. 위 방법은 모두 분 단위로 예약된 일정 작업을 구현할 수 있습니다. 각각의 장점이 있습니다. SystemD 타이머는 좀 더 형식적이지만 좀 더 복잡해 보입니다. Crontab+
sleep 방법이 어색하긴 하지만, 몇몇 작은 작업에는 무능하지 않습니다.
위 내용은 Crontab이 매초마다 작업을 실행하도록 만드는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!