0 0 * * 1 root hostname >> /tmp/hostname.txt
위 cron 항목은 월요일 자정에 실행되어야 하며 명령의 출력이 포함된 파일을 /tmp
생성 해야 합니다 . 하지만 빈 파일만 생성됩니다. 왜?hostname.txt
hostname
답변1
crontab 항목을 처리할 때 일반적으로 다음 위치 중 하나에 있는 시스템 전체 크론을 구별하는 것이 중요합니다.
- /etc/crontab
- /etc/cron.d/*
- /etc/cron.daily/*
- /etc/cron.weekly/*
- 등.
또는 해당 디렉토리에 저장된 실제 사용자 수준 변경 사항은 다음과 같습니다 /var/spool/cron
.
$ sudo ls -l /var/spool/cron/
total 0
-rw------- 1 saml root 0 Jun 6 06:43 saml
crontab -e
특정 사용자로서 명령을 사용하여 이러한 항목에 액세스할 수 있습니다. 루트에도 이러한 항목이 있을 수 있습니다.
너의 문제
포함된 예는 시스템 레벨 유형을 생성할 때 지정한 행 유형에 대한 것입니다 cron
. 유일한 차이점은 명령을 실행하는 사용자입니다. 일부 유형의 항목을 생성할 때 crontab -e
crontab 항목이 해당 항목을 생성한 사용자에게 이미 할당되어 있으므로 중복되므로 이는 필요하지 않습니다.
따라서 줄을 다음과 같이 변경하십시오.
0 0 * * 1 hostname >> /tmp/hostname.txt
문제를 해결하세요.
일일 및 주간 크론은 어떻게 작동하나요?
일반적으로 /etc/crontab
기본 파일에 다음과 같은 항목이 표시됩니다.
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
해당 디렉터리의 스크립트가 실행되는 시기를 제어합니다. 따라서 일일 시간은 현지 시간으로 매일 오전 4시 20분입니다.
따라서 해당 명령을 매일 실행하려면 hostname >> /tmp/hostname.txt
해당 명령을 스크립트에 넣고 실행 가능하게 만든 다음 스크립트 파일을 cron.daily
디렉터리에 넣으면 됩니다.
/etc/cron.daily/catchhostname.bash
#!/bin/bash
hostname >> /tmp/hostname.txt
일일 플래너
# ls -l |grep catch
-rwxr-xr-x 1 root root 118 Feb 28 2013 catchhostname.bash
답변2
위의 내용이 루트의 crontab에 있는 실제 줄이라고 가정합니다.
0 0 * * 1 root hostname >> /tmp/hostname.txt
이 줄은 "root"라는 명령을 실행하고 "hostname" 매개변수를 전달합니다. /bin 또는 /usr/bin(cron의 기본 경로)에 명령 이름 "root"가 없으면 빈 파일 출력이 표시됩니다.