실제 날짜/시간을 사용하고 일시 중지를 무시하는 절전 명령이 있습니까?

실제 날짜/시간을 사용하고 일시 중지를 무시하는 절전 명령이 있습니까?

실제 날짜/시간을 사용하고 일시 중지를 무시하는 절전 명령이 있습니까?

echo a;sleep 3600;echo b

10분 일하고 2시간 동안 노트북을 멈춥니다. 일시 중지 상태에서 깨어날 때 "b"는 즉시가 아닌 50분 후에만 인쇄됩니다.

또 다른 옵션은

nA=`date +%s`;nB=$((nA+3600))
while((`date +%s`<nB));do sleep 1;done

그런데 이것을 수행하는 명령이 있는지 궁금합니다. sleep --usedatetimecheck 3s 3600(3초처럼 일시 중지 가능한 수면은 선택 사항)이 있으면 좋을 것입니다.

그런데 컴퓨터가 일시 중지 상태에서 깨어날 때를 감지하는 데 사용하는 비결은 3초 동안 잠을 자고 잠자기 전 날짜 시간을 비교하여 9초보다 길면 컴퓨터가 깨어났다고 추측하는 것입니다(높은 로드 평균도 확인할 수 있습니다). 9초 테스트를 추가합니다).

나는 우분투를 사용하고 있습니다.

추신: 몇 가지 일이 즉시 발생한다고 말할 수도 있습니다. 하지만 그렇기 때문에 선택사항이어야 합니다. 방금 나에게 떠오른 또 다른 문제는 예를 들어 모든 절전 명령을 업데이트하기 위해 신호를 보낼 수 있다는 것입니다 pkill -SIGUSR1 sleep.

답변1

이와 같은 것은 sleep --wake-me-from-suspend --realtime실제로 존재하지 않습니다.

일시 중지를 무시하는 것이 가장 어려운 부분입니다. 일시 중지 기간 동안 CPU에서 더 이상 실행 중인 소프트웨어가 없고 실제로 CPU가 실행되지 않으며 실시간 시계 장치를 사용하여 컴퓨터를 깨워야 하기 때문입니다. 위로. 이를 위해서는 운영 체제에 차익 거래 액세스 권한이 있어야 합니다. 왜냐하면 하나의 RTC, 많은 사용자 및 프로그램을 사용하면 하나의 액세스 권한만 부여할 수 없고 다른 모든 사람이 수행하는 작업을 방해하지 않기를 바랄 수 없기 때문입니다.

따라서 운영 체제(Linux인 것 같은데요?)와 통신하고 RTC 설정을 조정할 수 있는 무언가가 필요합니다.

systemd-timers가 여기로 오는 길이에요.

두 가지가 필요합니다.

  1. 실행하려는 내용을 systemd가 이해할 수 있는 형식으로 변환해야 합니다. ㅏ유닛 파일(특히 서비스). 읽다 man systemd.service!
  2. 일시 중지된 상태에서 머신을 깨울 수 있는 시스템 타이머를 설치해야 합니다. 왜냐하면 그것은매우권한이 있는 작업, 이 작업은 수퍼유저 소유 타이머로만 수행할 수 있습니다. 봐 man systemd.timerWakeSystem=true.

원하는 작업을 수행하기 위해 서비스 파일을 작성합니다. 이는 아마도 시작하려는 프로세스일 것이므로(일반적으로 그렇습니다) 적절한 서비스 파일 Type=(보통 exec)을 작성합니다. 또는 파일 생성, 포트에 메시지 보내기 또는 기타 작업 수행과 같은 일부 작업을 수행할 수 있으며, 스크립트는 계속하기 전에 해당 작업이 발생할 때까지 기다립니다.

서비스를 시작하도록 타이머 장치를 작성합니다. 당신은 OnCalendar="벽시계와 종이 달력"처럼 힘든 기상 시간을 스스로에게 부여 하곤 했습니다 . 정확한 시간대로 시간을 지정하세요! 일반적으로 상당히 명시적인 날짜/시간 형식을 사용하는 것이 좋습니다 2023-10-14 11:15:00 UTC.

두 개의 파일(예: veganeye.serviceveganeye.timer)을 시스템 장치의 디렉토리(일반적으로 /etc/systemd/system/)에 넣은 다음 타이머 장치( systemctl enable --now veganeye.timer)를 시작합니다. 두 개의 파일을 작성하고 타이머를 활성화하면 이 모든 작업을 쉘 스크립트에서 수행할 수 있습니다. 실제로 코드가 많지 않습니다.

관련 정보