내 컴퓨터가 작업을 수행하기를 원하는 경우가 많지만 지금은 그렇지 않습니다. 예를 들어, 30분 후에 퇴근 시간을 알려주도록 설정할 수 있습니다. 아니면 대부분의 사람들이 사무실을 떠났을 것이라고 확신하는 2시간 후에 복잡한 테스트를 실행하고 싶을 수도 있습니다.
하루 중 특정 시간에 실행할 크론 작업을 생성할 수 있다는 것을 알고 있지만, 제가 원하는 것은 "이 스크립트를 10분 안에 실행"과 같은 간단한 것뿐이고, 얼마나 오래 걸리는지 파악해야 하기 때문에 작업량이 많은 것 같습니다. 실제로는 지금부터 X분/시간/일이 소요됩니다. 완료되면 크론 작업을 삭제하세요.
물론 이 스크립트를 작성하여 백그라운드에서 실행할 수도 있습니다.
sleep X
do_task
하지만 이것은 투박해 보입니다. 각 작업에 대해 새 스크립트가 필요하거나, 내가 원하는 작업을 수행할 수 있을 만큼 일반적인 스크립트를 작성하고 유지 관리해야 하며, 분 단위로 몇 초가 있는지 계산해야 한다는 점은 말할 것도 없습니다. 내가 원하는 시간 또는 며칠.
이 문제에 대한 확립된 해결책은 없나요?
답변1
나는 간단한 스크립트를 사용합니다 at
.
#!/bin/bash
# email reminder notes using at(1)...
read -p "Time of message? [HH:MM] " time
read -p "Date of message? [dd.mm.yy] " date
read -p "Message body? " message
at "$time" "$date" <<EOF
echo "$message" | mailx -s "REMINDER" [email protected]
EOF
이메일 대신 데스크톱 알림을 원할 경우 또는 $message
으로 쉽게 파이프할 수 있습니다 notify-send
.dzen
답변2
일반적인 사용법at
예
하고 싶은 일을 수행하는 스크립트를 작성하세요. 모든 외부 명령에 대한 전체 경로를 사용하고 올바른 로그 파일이나 이메일에 출력을 기록하십시오.
테스트 스크립트.
활성화해at -f YOURSCRIPT -t MMDDhhmm
답변3
2023년 현재 많은 배포판에서 기본적으로 이 작업을 비활성화하므로 systemd
이 작업을 완료하는 대신 사용하고 싶을 수 있습니다 .at
atd
다음과 같이 systemctl을 사용할 수 있습니다.
systemd-run --user --on-calendar=<iso time> <command> [arguments...]
예를 들어
systemd-run --user --on-calendar="2023-11-03 07:00" /usr/bin/aplay /home/user/chime.wav
그러면 명령을 실행한 후 삭제되는 임시 타이머가 생성됩니다. --on-calendar에 대한 인수에 별표가 포함된 경우(예: --on-calendar=")--* 07:00", 이 명령은 매일 실행됩니다.
구성된 모든 타이머 목록을 얻으려면 다음을 사용하십시오.
systemctl --user list-timers