저는 bash를 사용하고 있으며 나중에 지정된 시간에 1초의 정밀도로 명령/스크립트를 실행하는 방법을 알고 싶습니다.
- 명령에 대한 매뉴얼 페이지를 읽었 at
지만 내가 아는 한 초가 아닌 분만 지정할 수 있습니다. 이제 먼저 이를 사용한 at
다음 sleep
정확한 순간에 실행되도록 합니다. 설명하기 위해 21/22/05에 my_script.sh를 실행하려면 다음을 수행합니다.
echo "sleep 5; my_script.sh" | at 22.21
하지만 내장 명령이 있으면 더 좋을 것입니다. 예를 들어 at 22.21.05
.
답변1
나는 이것이 가능하다고 믿지 않습니다. cron
분 단위까지만 연결하면 at
유틸리티가 해당 작업을 수행하도록 연결됩니다. 나는 당신이 올바른 해결책을 가지고 있다고 생각합니다 - 수면엑스실행되기 몇 초 전.
답변2
기술을 함수로 바꿀 수 있습니다.
atplus () { local sec=${1##*.} time=${1%.*}; shift; echo "sleep $sec; $@" | at $time; }
시도 해봐:
atplus 22.21.05 my_script.sh
하지만 정확성이 보장되지는 않는다는 점을 알아 두시기 바랍니다.
답변3
실제로 at
초를 지원할 수 있음
나는 이것이 항상 잘 지원되는 것은 아니라고 생각하지만(특정 구현에 따라 다름) 원칙적으로는at
가능한초를 지원합니다.
매뉴얼 페이지에서:
-티시간다음에서 작업 실행시간, [[CC]YY]MMDDhhmm[.ss] 형식으로 제공됩니다.
[.ss]
끝을 보세요 .
즉, 이 -t
옵션을 사용하면 다음과 같은 내용을 입력할 수 있습니다.
echo "yourscript.sh" | sudo at -t 04281549.45
15:49:45
즉, 명령은 45초 안에 실행되어야 합니다.
(4월 28일)
예상대로 시도하면 출력은 다음 at
과 같습니다.
job 38 at Wed Apr 28 15:49:45 2021
노트: 시도해보니 아직 몇초 늦었지만 그래도 실행됨아니 전에 15:49:45
, 이는 지정된 초 수가 다음과 같음을 의미합니다.아니요내부적으로 는 무시되지만 at
실제로는 고려됩니다. 따라서 "이 명령을 다음 날짜 이전에 실행하지 않도록 지연 " 15:49:45
과 같이 말하고 싶을 때 초 수를 지정하는 것이 여전히 유용합니다 .