English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Linux crontab은 정기적으로 프로그램을 실행하는 명령입니다.
操作系统 설치가 완료되면 기본적으로 이 작업 예약 명령이 시작됩니다.
crond 명령은 분당으로 정기적으로 실행해야 할 작업이 있는지 확인하고, 해당 작업이 있으면 자동으로 해당 작업을 실행합니다.
주의:새로 생성된 cron 작업은 즉시 실행되지 않으며, 최소한 2 분 후에야 가능합니다. 물론 cron을 재시작하여 즉시 실행할 수 있습니다.
Linux 작업 예약의 주요 작업은 다음과 같은 두 가지로 나뉩니다:
crontab [ -u user ] 파일
또는
crontab [ -u user ] { -l | -r | -e }
설명:
crontab은 사용자가 일정 시간 또는 일정 간격으로 프로그램을 실행하도록 사용됩니다. 다시 말해, 사용자의 시간표와 유사합니다.
-u user는 특정 user의 시간표를 설정하는 것을 의미합니다. 이 경우, 다른 사람의 시간표를 설정하려면 권한이 필요합니다(예: root). u user를 사용하지 않으면 -u user라면, 자신의 시간표를 설정하는 것을 의미합니다.
파라미터 설명:
시간 형식은 다음과 같습니다:
f1 f2 f3 f4 f5 program
* * * * * - - - - - | | | | | | | | | +----- 주 중 주几天 (0 - 6) (일요일은 0) | | | +---------- 월 (1 - 12) | | +--------------- 한 달 중 몇 번째 날 (1 - 31) | +-------------------- 시간 (0 - 23) +------------------------- 분 (0 - 59)
사용자는 모든 설정을 먼저 파일에 저장하고, crontab file 방식으로 실행 시간을 설정할 수도 있습니다.
매 분에 한 번 실행 /bin/ls:
* * * * * /bin/ls
서버에서 12 월 내, 매일 아침 6 점까지 12 점, 매 3 시간 0 분에 한 번 실행 /usr/bin/backup:
0 6-12/3 * 12 * /usr/bin/backup
월요일부터 금요일까지 매일 오후 5:00 [email protected]에게 한封信을 보냅니다:
0 17 * * 1-5 mail -s "hi" [email protected] < /tmp/maildata
매월 매일 밤 0 시 20 분, 2 점 20 분, 4 점 20 분.... echo "haha" 실행:
20 0-23/2 * * * echo "haha"
다음에 몇 가지 구체적인 예제를 보겠습니다:
0 */2 * * * /sbin/service httpd restart 매 두 시간에 한 번 apache를 재시작하는 의미 50 7 * * * /sbin/service sshd start 매일 실행하는 의미7:50 ssh 서비스를 시작 50 22 * * * /sbin/service sshd stop 매일 실행하는 의미22:50 ssh 서비스를 종료 0 0 1,15 * * fsck /home 매월1번호와15번호 확인/home 디스크 1 * * * * /home/bruce/backup 매시간의 첫 번째 분에 실행 /home/bruce/backup这个文件 00 03 * * 1-5 find /home "*.xxx" -mtime +4 -exec rm {} \; 每周一至周五3点钟,在目录/home中,查找文件名为*.xxx的文件,并删除4天前的文件。 30 6 */10 * * ls 意思是每月的1、11、21、31日是的6:30 실행了一次 ls 명령어
주의:프로그램이 지정된 시간에 실행되면 시스템은 현재 사용자에게 이 프로그램이 실행된 내용을 표시하는 이메일을 보냅니다. 이러한 이메일을 받고 싶지 않으면 각 행에 공백을 추가하여 > /dev/null 2>&1 만들면 됩니다. 예를 들어:
20 03 * * * . /etc/profile;/bin/sh /var/www/w3codebox/test.sh > /dev/null 2>&1
스크립트를 cron tab을 사용하여 정기적으로 실행할 때 실행되지 않지만, 직접 명령어를 사용하여 실행하면 예를 들어 ./test.sh)이 다시 정상적으로 실행되지만, 이는 환경 변수를 읽을 수 없기 때문입니다.
해결 방법:
1、모든 명령어는 절대 경로 형식으로 작성되어야 합니다. 예를 들어: /usr/local/bin/docker。
2、shell 스크립트의 시작 부분에 다음 코드를 사용합니다:
#!/bin/sh . /etc/profile . ~/.bash_profile
3、 /etc/crontab 에 환경 변수를 추가하여 실행할 명령어 전에 명령어를 추가할 수 있습니다. . /etc/profile;/bin/sh를 사용하여 환경 변수를 효과적으로 활성화하면 예를 들어:
20 03 * * * . /etc/profile;/bin/sh /var/www/w3codebox/test.sh