나중에 실행할 명령을 편리하게 예약 하시겠습니까?


87

8 시간 후에 명령을 실행하는 간단한 방법은 무엇입니까? 나는 이런 식으로 생각할 수 있습니다.

nohup bash -c "sleep 28800 ; ./mycommand.sh" &

더 "적절한"방법이 있습니까?


nohup+에 문제가 sleep있습니까? 왜 "부적절하다"?
cprn

답변:


123

at명령을 사용할 수 있습니다 . 은 at나중에 명령을 실행합니다. at유틸리티에서-작업, 나중에 실행하기로 표준 입력과 함께 그룹을에서 명령을 읽어하여야한다.

일반적으로 atUbuntu에 기본적으로 설치되지만 릴리스에 포함되어 있지 않은 경우 다음을 통해 설치하십시오.

sudo apt-get install at

자세한 내용, 옵션, 예제 및 기타 정보는 Ubuntu 맨 페이지 리포지토리를 참조하십시오.

예:

at now +8 hours -f ~/myscript.sh

tomorrow또는 과 같이 편리한 속기를 사용할 수도 있습니다 noon.

echo "tweet fore" | at teatime 

경고 : 파이프 왼쪽에서 명령을 즉시 실행 하지만 나중에 출력 만 표시합니다. 이 예제에서는 작업을에 파이프하는 방법도 보여줍니다at. at -c예약 된 작업을 검사 할 수있는 방법으로 다음과 같이 번호와 함께 편리하게 나열 할 수 있습니다.

at -c 3

19
더 구체적으로 예를 들어 원래 포스터의 질문을 해결하는 간단한 사용 예를 추가하는 것이 도움이 될 수도 있습니다at now +8 hours -f ~/myscript.sh
steeldriver

6
또한 at 8:00절대 시간에 명령을 실행해야 batch하며 "컴퓨터가 유휴 상태 인 것처럼 보일 때"
Simon Richter

4
궁금한 사람은 teatime오후 4시에 있습니다. 몇 가지 이유를 들어이를하지에서 언급 한 것 manpages.ubuntu.com/manpages/raring/man1/at.1posix.html 하지만에 man at여기 manpages.ubuntu.com/manpages/raring/en/man1/at.1.html .
Dan

3
"at"유틸리티는 기본적으로 설치되어 있지 않으며 다른 사람이 "at"패키지를 설치하기를 원할 수도 있습니다. 편집 : 어쨌든, 나는 단순히 답변을 편집했습니다 (맨 페이지 링크도 수정했습니다).
heartsmagic

4
그주의 배관 에서 즉시 명령을 실행하고 출력 만 예약에. 예약을 원했지만 gpio write 8 1바로 실행 했기 때문에 4 시간 3D 인쇄에 실패 했습니다.
Maciej Swic 8

8

예, 크론 작업을 설정할 수 있습니다.

예를 들어, 현재 시간이 14:39:00이고 오늘이 8 월 30 일 금요일 인 경우 crontab -e명령을 사용하여 crontab 파일에 다음 cron 작업 (8 시간 후에 실행)을 추가 할 수 있습니다 .

39 22 30 8 5  /path/to/mycommand.sh

추가 정보 :


3
그래, 나는 Cron 작업에 대해 알고 언급해야합니다. 그것은 crontab에 무기한으로 둘러싸여 있기 때문에 더 지저분합니다.
Steve Bennett

4
@ RaduRădeanu : cron으로, 몇 년 후에 다시 발사 될 수 있음을주의하십시오 (금요일에 8 월 30 일이 또있을 때) ...
Olivier Dulac

2
이것은 영리한 해킹입니다. 그러나 'at'이 훨씬 더 나은 방법입니다. 14:39에 컴퓨터를 끄면 어떻게됩니까?
emory

1
그게 여전히 내 요점이 아닙니다. 내 요점은 입력 한 텍스트가 이벤트 후에도 여전히 crontab에 그대로 앉아 다른 정리 작업을 생성한다는 것입니다.
스티브 베넷

2
@SteveBennett 예, 맞습니다. 명령은 crontab제거 할 때까지 남아 있습니다. 1 년 후, 누가 거기에 넣었는지, 왜 그 이유를 잊었을 때, 당신은 명령으로 무엇을해야하는지 궁금해하는 머리를 긁적 거리게 될 것입니다.
Paddy Landau

8

의 그놈 기반의 GUI를 사용 cron, at등을 :

CronHowto 의 소개는 gnome-schedule모든 쓰레기를 터미널에 입력하는 것보다 훨씬 좋은 gui 사용을 제안합니다 ( "power"* nix / bsd 사용자가 아닌 "평균"우분투 사용자의 경우).

Unity Dash (또는 다른 애플리케이션 메뉴)를 사용하여 예약 된 작업 을 찾 거나 실행하여이를 실행하십시오 gnome-schedule.

Gnome 기반 Ubuntu 시스템에서 응용 프로그램-> 시스템 도구의 Gnome Scheduled tasks 도구 (gnome-schedule 패키지)는 Cron을 사용하도록 프롬프트하는 그래픽 인터페이스를 제공합니다. 프로젝트 웹 사이트는 http://gnome-schedule.sourceforge.net/에 있습니다 . 소프트웨어는 소프트웨어 센터에서 설치하거나 다음을 입력하여 설치할 수 있습니다

sudo apt-get install gnome-schedule

터미널에서.

사용하여 gnome-schedule홈 디렉토리에 스크립트, "에서"새 명령 윈도우의이 유형을 사용하여 설정 될 것이다 :

여기에 이미지 설명을 입력하십시오


5

나는 이것을 발견하기 전에 빠르고 더러운 방법을 알아 냈습니다 at.

정오에 스크립트를 실행한다고 가정 해보십시오.

until [[ "$(date)" =~ "12:00:" ]]; do
    sleep 10
done
./mycommand.sh

내일 정오에 실행하기를 원한다고 가정하십시오 (오늘은 11 월 24 일입니다).

until [[ "$(date)" =~ "25 12:00:" ]]; do 
    sleep 30
done
./mycommand.sh

업데이트 : 약간 더 나은 방법 : 다음을 사용하여 관심있는 숫자 만 테스트하십시오 date +FORMAT.

until [[ $(date +%H:%M) == 21:06 ]]; do
    ...

10
이 답변을 upvoted 한 두 사람에게, 사용하십시오 at, cron또는 기타 실제 스케줄러 응용 프로그램입니다. 작업 예약은 어렵고 재발견해야 할 휠이 아닙니다.
dimo414

1
내 방법에 어떤 문제가 있습니까?
wjandrea

8
최소한, 그것은 바쁘기 때문에 낭비입니다. 더 나쁘다, 그것이 정확하다는 보장은 없다; 조건부를 놓치는 것이 가능할 수도 있습니다. 스케줄러를 정규식으로 작성하는 것도 오류가 발생하기 쉽습니다. 작동 할 수도 있지만에 비해 이점이 없습니다 at.
dimo414

(옆으로 : 나는 당신의 답을
공감

4
사용해야하는 또 다른 이유 at는 작업이 재부팅 후에도 지속되기 때문입니다.
manatwork
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.