cron
타이머에 액세스하여 다음 스크립트 실행까지 남은 시간(초) crontab
이나 마지막 실행 이후의 시간(초)을 얻을 수 있는 방법이 있습니까 ?
답변1
쉬운 일이 아닙니다. crond는 커널의 신호를 기다리고 잠자기 상태로 전환됩니다. 신호를 받으면 해당 1분 내에 실행할 cronjob이 있는지 확인하고 해당 작업을 시작한 다음 다시 절전 모드로 전환됩니다.
이것은 매우 효율적인 디자인입니다. cron은 잠자는 동안 CPU를 사용하지 않습니다. 또한 시간의 흐름을 인식하지 못합니다. 절전 모드로 전환되면 "등록된" cronjob의 다음 명령이 실행되어야 하는 시간을 기준으로 "시간 초과"를 설정합니다.
솔라리스 10의 경우:
sol10-primary:/> # pflags 271
271: /usr/sbin/cron
data model = _ILP32 flags = ORPHAN|MSACCT|MSFORK
/1: flags = ASLEEP pollsys(0x8047c70,0x1,0x8047ce8,0x806ba00)
cron 데몬을 추적할 때 시간 초과가 발생하고 다음과 같이 절전 모드로 전환되는 것을 볼 수 있습니다.
waitid(P_ALL, 0, 0x08047CD0, WEXITED|WTRAPPED|WNOHANG) Err#10 ECHILD
time() = 1361952435
pollsys(0x08047C70, 1, 0x08047CE8, 0x0806BA00) (sleeping...)
fd=3 ev=POLLRDNORM rev=0
timeout: 105.000000000 sec
sigmask = 0 0 0 0
크론 작업을 업데이트하면 절전 모드도 해제되지만 자체 구성을 업데이트한 후 새로운 제한 시간 값으로 다시 절전 모드로 전환됩니다.
설정된 시간 초과를 볼 수 있습니다. cron은 절전 모드로 전환하기 전에 시간 시스템 호출을 호출하므로(epoc 이후 초 수를 반환함) 이를 관찰하면(즉, time() 시스템 호출이 호출될 때 프로세스를 추적하면 현재 시간을 확인하고 이를 pollsys 호출에 설정된 시간 초과와 비교합니다.
그러니까...말씀드린 것처럼 쉽지 않아요.