64시간마다 스크립트를 실행하려면 어떻게 해야 합니까?

64시간마다 스크립트를 실행하려면 어떻게 해야 합니까?

64시간마다 스크립트를 실행해야 합니다. 나는 대답을 찾을 수 없습니다 cron. 이것을 사용할 수 있습니까? 아니면 쉘 스크립트에서 루프를 사용해야 합니까?

답변1

매시간마다 실행하고 임의의 순간(예: Unix epoch 시간의 순간 0) 이후의 시간 수가 64의 배수인지 확인하세요.

0 * * * * t=$(date +\%s); [ "$(( (t / 3600) \% 64 ))" -eq 0 ] && your-command

답변2

예를 들어 crontab "프런트 엔드"를 사용하는 것이 좋습니다.크론탭 마스터초보자라면 crontab에 대해 알아보세요.

다만, 귀하의 경우와 마찬가지로 시간 설정은 0~23 사이의 값만 허용하므로 여기서는 crontab을 사용할 수 없습니다.

대신 at귀하의 경우에는 다음과 같은 것을 사용하는 것이 좋습니다.

at now + 64 hours

그런 다음 명령을 입력하거나

echo "<your command>" | at now + 64 hours

기본적으로 명령이 마지막으로 호출되었을 때 즉시 실행되도록 예약합니다. 또한 시간 델타가 아닌 정확한 시간을 원하는 경우 시간 산술을 수행한 다음 at정확한 시간으로 명령을 실행하는 것이 좋습니다.

나는 독서를 적극 권장합니다매뉴얼 페이지at, 꽤 포괄적이기 때문입니다.

답변3

cron날짜 또는 시계 이벤트별로 실행하는 데 사용됩니다(예: 달이나 주의 첫 번째 날 또는 하루의 3시간마다).

단순히 시계 시간이나 날짜 산술로 표시할 수 없는 간격으로 실행되는 작업의 경우 타이머를 사용하는 것이 좋습니다 systemd. 물론 systemd이는 해당 장치에서 타이머를 실행하는 경우에만 작동합니다.

스크립트를 실행하기 위한 서비스 파일과 이벤트를 관리하기 위한 타이머 파일이라는 두 개의 파일이 필요합니다.

$cat /etc/systemd/system/myscript.service

[Unit]
Description=this service runs my script

[Service]
ExecStart=/full/path/to/myscript.sh

#[Install]
#WantedBy=multi-user.target

서비스는 성공 여부 등을 확인하지 않고 스크립트를 실행합니다. 서비스는 선택적으로 활성화될 수 있습니다. systemctl enable myscript.service즉, 시작 시 한 번 실행됩니다. 타이머가 시작 이벤트를 처리하기 때문에 이에 대해 언급했습니다. 스크립트를 수동으로 실행할 수 있습니다 systemctl start myscript.service.


$cat /etc/systemd/system/myscript.timer

[Unit]
Description=this timer runs myscript.service every 64h

[Timer]
OnBootSec=120
OnUnitActiveSec=64h


[Install]
WantedBy=timers.target

myscript.service이는 서비스가 마지막으로 활성화된 이후 64시간마다 실행되는 타이머이자 시작 후 2분 동안 실행되는 타이머입니다(서비스가 실행될 수 있도록 시스템이 올바른 상태인지 확인하기 위해). 타이머가 작동됩니다.아니요전원을 껐다 켜거나 끄는 경우 64시간을 기억하세요. 그에 따라 타이머를 활성화하고 시작하십시오.

systemctl enable myscript.timer
systemctl start myscript.timer

타이머는 부팅 후 또는 마지막 장치 활성화 이후에만 시작되므로 타이머가 실행되도록 하려면 서비스를 한 번 실행해야 합니다.

systemctl start myscript.service

타이머 상태를 확인하세요.

systemctl list-timers

답변4

놀랍게도 아무도 다음 사항을 언급하지 않았습니다.

아나크론

대부분의 배포판에서 표준입니다.

관련 정보