crontab에 항목을 어떻게 추가합니까?


13

crontab을 처음 사용하고 있습니다. 매우 간단한 몇 가지 테스트 크론 작업을 작성하고 실행하고 싶습니다.

$crontab * * * * * echo "Hi"

아무것도 생산하지 않습니다.

crontab */1 * * * * echo "hi"

말한다 */1: No such file or directory.

또한 현재 실행중인 크론 작업 (내 소유 한 작업뿐만 아니라 루트와 같은 다른 사용자가 시작한 작업)을 나열하는 방법은 무엇입니까?

특정 cron 작업을 어떻게 삭제합니까?


cron 작업을 편집하고 작성하는 방법과 파일 구조에 대한 설명은이 crontab 구문 안내서
KJS

답변:


21

그렇게 사용할 수 없습니다 crontab. 사용 man crontab이 유틸리티를 호출하는 올바른 방법에 대해 읽을 수 있습니다.

crontab -e현재 사용자의 cron 항목을 편집하는 데 사용하려고 합니다 (행을 추가 / 수정 / 제거 할 수 있음). crontab -l구성된 작업의 현재 목록을 보는 데 사용 합니다.

다른 사용자의 crontab을 볼 때 기본 설치에 루트가 없으면 불가능합니다. 모든 것을 루트로 나열하는 방법 은 모든 사용자의 모든 cron 작업을 나열하는 방법을 참조하십시오 .

참고 :이 명령 줄 (에 쉘 글 로빙 문자를 사용할 때 매우 조심해야 *하고 ?특히). *현재 디렉토리의 파일 목록으로 확장되어 예기치 않은 결과가 발생할 수 있습니다. 당신이 통과하려면 *뭔가에 인수로 그것을 인용 ( '*').


그래서 crontab -e를 수행하고 편집기에서 * / 1 * * * * echo "hi"항목을 입력하고이 파일을 저장하면 crontab : 새로운 crontab 설치 중이라는 메시지가 표시됩니다. 하지만 안녕하세요 메시지가 화면에 나타나지 않습니다. 내가 지금 무엇을 놓치고 있습니까? 감사.
xyz

2
crontab의 출력은 결코 "화면"으로 이동하지 않습니다. crontab의 POSIX 매뉴얼 페이지에서 : "표준 출력 및 표준 오류가 crontab 항목에서 실행 된 명령으로 경로 재 지정되지 않으면 생성 된 출력 또는 오류는 구현에 따라 다른 방법으로 사용자에게 우편으로 발송됩니다."
Mat

1
작업 출력이 작업 소유자의 로컬 메일 박스로 전송됩니다. mail명령 줄에서 실행 하면 로컬 메일 상자에 액세스해야합니다 (구성된 경우). 그래픽 환경에서 'hi'를 보려면 작업을 다음과 같이 설정할 수 * * * * * export DISPLAY=:0; xmessage 'hi'있습니다.
manatwork

@manatwork XAUTHORITY가 필요할 수도 있습니다 . 쉽지 않을 수도 있습니다 .
derobert

7

편집 방법에는 두 가지가 있습니다 crontab.

  1. 대화 형으로 사용 crontab -e을 열 것이다, crontab에 의해 지정된 편집기 $VISUAL$EDITOR, 또는

  2. 비 대화식으로 사용하여 crontab crontab.txt간단하게 가져올 것이다, crontab파일에서 항목을 crontab.txt, 대체 현재 사용자에 대한 기존의 활성의 crontab을.

당신이 가진 문제는 단순히 crontab명령을 잘못 사용한다는 것입니다.


다음은 비 대화식 crontab 조작에 관한 것입니다.

따라서 프로그래밍 방식으로 특정 작업제거 하려면 다음과 같은 작업을 수행 할 수 있습니다

$ crontab -l | grep -v 'PATTERN' >crontab.txt && crontab crontab.txt

여기서 PATTERN제거하려는 작업과 일치하는 정규식이 있습니다. 여기, crontab -l당신에게 당신의 현재를 줄 것 crontab입니다.

또는 파일 crontab-fragment.txt에 활성 crontab에서 제거하려는 항목이있는 경우 ,

$ crontab -l | grep -v -Fx -f crontab-fragment.txt >crontab.txt && crontab crontab.txt

현재 crontab을 읽고 crontab-fragment.txt현재 디렉토리 의 파일 에서 발생하는 모든 행을 필터링 (제거)합니다 (전체 행 문자열 비교 사용). 결과는 crontab.txt현재 crontab을 대체하기 위해 저장되고 거기에서로드됩니다.

하나 이상의 작업추가 하려면 다음과 같이하십시오.

$ crontab -l | cat - crontab-fragment.txt >crontab.txt && crontab crontab.txt

파일 crontab-fragment.txt에 추가하려는 항목이 포함되어 있다고 가정합니다 . 현재 crontab을 읽고 여기에 항목을 추가 crontab-fragment.txt하고를 만듭니다 crontab.txt. 그러면 crontab.txt파일이 현재 crontab을 대체합니다.


2

crontab을 대화식으로 수정하려면 crontab -e다른 옵션없이 명령을 실행하십시오 . crontab 사본에서 편집기가 시작됩니다. editor를 종료하면 편집 된 사본이 새로운 crontab이됩니다. VISUALEDITOR환경 변수를 통해 시작되는 편집기를 제어 할 수 있습니다 . crontab을 나열하려면을 실행하십시오 crontab -l.

당신이 스크립트 세트에서의 crontab을 수정하려면 VISUALEDITOR스크립트 나 쉘의 경로에 그 수정을 제자리에 제공된 파일을 니펫을. 편집기 ed는 여기서 가능하거나 sed -i구현 sed에이 옵션이있는 경우 가능합니다 . 무조건 행을 추가하려면을 사용할 수 있습니다 echo … >>. 인용에주의하십시오. 의심스러운 경우 스크립트를 작성하고 스크립트 이름을로 전달하십시오 EDITOR.

script=$(mktemp)
cat <<'EOF' >"$script"
#!/bin/sh
ed -s "$1" <<'EOS'
g/^ *[^= ][^ =]*  *[^= ][^ =]*  *[^= ][^ =]*  *[^= ][^ =]*  *[^= ][^ =]*  *echo "hi"$/d
$a
* * * * * echo "hi"
.
w
q
EOS
EOF

2

조금 늦었지만 다른 사람들이 여기를 찾고 있습니다. VISUAL및로 입력 / 출력 스트림을 조작하는 것보다 쉬운 방법이 EDITOR있습니다.

당신은 단순히 파일에 크론 일정을 쓰기 줄에 1 일 및 명령을 사용할 수 crontab [filename]있도록 할 수 있습니다 cat로 당신의 작업 filename당신 같은 경우 마지막 말에 crontab을 호출 한 다음 스크립트의 일부로합니다.

실제로 이것은 man crontab힌트를 먼저 나열하여 힌트 로 가장 많이 사용됩니다.


2

crontab자동화 또는 명령 행에서 항목을 추가 하려면 원하는 시간을 설정하십시오.

echo "* * * * * /yourpath/yourcommand 2>&1 >> /var/log/somelog.log" >> /var/spool/cron/root (or appropriate username)

그때:

service crond reload

crontab을 다시로드하십시오.


이것은 이동할 수 없습니다. 모든 유닉스가 crontab 파일을에 저장하는 것은 아닙니다 /var/spool/cron. 더 좋은 방법은 crontab(1)명령 을 사용하는 것 입니다.
thrig

사실 일 수도 있지만 시스템에서 수행 할 있는 방법의 원리를 보여주는 것이 었습니다. 네, 한 줄씩 추가하려면 crontab에서 트릭을 수행합니다. 절대적인 대답이 아니라, 물건의 위치를 ​​알고 대량으로 추가 해야하는 경우입니다. 그것을 위해 가져 가라.
Chris Sprucefield

1

이 명령으로 시도하십시오 :

crontab -e 

그런 다음 cron 작업을 추가하십시오.

*/1 * * * * echo "hi"

그 파일에.


0

이전에 다른 의견에서 언급되었지만 아래에서 설명하는 방식을 강조하고 싶습니다. 파일에 항목을 추가 한 다음 파일을 crontab에 추가 할 때 매우 유용합니다. 이 파일에는 아래의 두 항목이 포함되며 파일 이름은입니다 hello-world-crontab.txt.

  • 0 09 * * * echo "Hello world!" >> /home/user/greeting.txt
  • 0 09 * * * python /home/user/greeting.py

그런 다음 아래 명령을 실행하여 이러한 항목을 crontab에 추가했습니다.

  • $ crontab hello-world-crontab.txt

다음 단계는 이러한 항목이 추가되었는지 확인하는 것입니다.

  • $ crontab -l

각 항목의 기능에 대한 간단한 설명 :

  • 이 crontab 항목은 "Hello world!"입니다. /home/user/greeting.txt매일 오전 9시에 파일에 .
    • 0 09 * * * echo "Hello world!" >> /home/user/greeting.txt
  • 이 crontab은 'Hello world!'명령 행에 인쇄되는 python 파일을 실행합니다. 매일 오전 9시에.
    • 0 09 * * * python /home/user/greeting.py
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.