찾다

예약된 작업에 대한 Linux 설명

May 14, 2018 am 10:11 AM
타이밍


이 문서의 디렉터리:

12.1 예약된 작업 구성

12.2 crontab 파일

12. 3 crond 명령 디버깅

12.4 정확 두 번째 작업 계획

12.1 예약된 작업 구성

우선 개념을 이해해야 합니다.

(1).crond는 데몬 클래스 프로그램이며 경로는 /usr/sbin/crond입니다. . 기본적으로 crond가 서비스 모드나 시스템 모드에서 시작되면 기본적으로 백그라운드 모드에서도 시작됩니다.

(2).crondtab은 crontab 파일을 관리하는 도구이며, crontab 파일은 예약된 작업 항목을 정의하는 파일입니다.

(3).crontab 파일은 시스템 예약 작업 파일 /etc/crontab 및 /etc/cron.d/*뿐만 아니라 각 사용자의 고유한 작업 파일인 /var/spool/cron/USERNAME을 포함하여 여러 위치에 존재합니다.

그런 다음 crontab 명령이 있습니다:

-l:列出定时任务条目
-r:删除当前任务列表终端所有任务条目
-i:删除条目时提示是否真的要删除
-e:编辑定时任务文件,实际上编辑的是/var/spool/cron/*文件
-u:操作指定用户的定时任务

현재 사용자의 crontab 파일을 편집하려면 crontab -e 명령을 실행하십시오. 예를 들어 루트 사용자인 경우 /var/spool을 편집합니다. /cron/루트 파일입니다. 예를 들어, 다음 줄을 작성합니다.

* * * * * /bin/echo "the first cron entry"  >>/tmp/crond.txt

이렇게 하면 echo 명령이 1분마다 실행되고 내용이 /tmp/crond.txt 파일에 추가됩니다.

작업 계획에서 작업 항목을 정의하는 방법은 /etc/crontab 파일에서 볼 수 있습니다.

[root@server2 ~]# cat /etc/crontab
SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=root
 
# For details see man 4 crontabs
 
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |# *  *  *  *  * user-name  command to be executed

이 파일에는 3개의 변수가 정의되어 있으며 그 중 하나가 PATH인데 이는 매우 중요합니다. 마지막에는 작업 항목의 정의 방법도 제공됩니다:

(1) 각 작업 항목은 6개의 섹션으로 나뉘며, 각 섹션은 공백으로 구분됩니다. /etc/crontab은 시스템 예약 작업 파일이지만 일반 예약 작업에는 이 섹션이 없습니다.

(2) 처음 5개 세그먼트는 각각 "시간 공유, 일, 월 및 주"를 나타내는 시간 설정 세그먼트입니다. 해당 정의는 합리적인 값 범위를 초과할 수 없습니다. 명령 또는 스크립트 작업 세그먼트입니다. 실행됩니다.

(3) 시간 정의 부분에서는 "*"를 사용하여 각 단위, 즉 매분, 매시간, 매일, 매월, 요일(여전히 매일)을 표시합니다.

(4) 각 기간에서 쉼표 ","를 사용하여 열거형을 나타낼 수 있습니다. 예를 들어 "0,30,50 * * * *"를 정의하여 시간, 30분, 30분을 나타냅니다. 매 시간마다 이 작업을 50분 동안 수행합니다.

(5) 각 기간에서 "-"를 사용하여 범위를 정의할 수 있으며 쉼표와 함께 사용할 수 있습니다. 예를 들어 분 세그먼트를 "00,20-30,50"으로 정의하면 정시, 20분부터 30분까지의 매분, 50분에 작업이 실행된다는 의미입니다.

(6) 각 기간에서 "/"를 사용하여 시간을 무시함을 나타냅니다. 예를 들어 작은 기간에 "0-13/2"을 정의하면 "0/2/4/6/"을 의미합니다. 8/10/12" 지점은 시간 정의를 만족합니다. "*/N"은 빈도를 나타내는 데 자주 사용됩니다. 예를 들어 "00 */2 * * *"는 매일 2시간마다 정시에 작업을 실행한다는 의미입니다.

(7) 정의된 날짜와 주가 충돌하는 경우 여러 번 실행됩니다(* 기호로 인한 충돌 제외). 예를 들어, 작업은 매월 15일에 실행되고, 작업도 수요일에 실행되도록 정의되어 있으며, 충돌이 없는 일반적인 상황에서는 수요일과 매월 15일에 실행됩니다. 특정 달이 수요일이기도 하면 해당 날짜에 작업이 두 번 실행됩니다. 따라서 주와 요일을 동시에 정의하는 작업은 피해야 합니다.

(8) 명령 단락(즉, 단락 6)에서 퍼센트 기호 "%"는 줄바꿈의 특별한 의미를 나타내기 때문에 임의로 나타날 수 없으며 첫 번째 % 이후의 모든 문자열은 명령으로 간주됩니다. .표준 입력.

예를 들어 다음 정의는 다음과 같습니다.

* * * * * /bin/cat >>/tmp/crond.txt %"the first %%cron entry%"

이 작업의 출력 결과는 다음과 같습니다.

"the firstcron entry"

따라서 파일 이름이 예약된 작업 항목에서 시간으로 정의된 경우 % 슬래시 이스케이프를 취소해야 합니다. 예:

* * * * * cp /etc/fstab /tmp/`date +\%Y-\%m-\%d`.txt

주의가 필요한 또 다른 기간 설정은 * 기호를 사용하면 하위 수준 시간이 상위 수준 시간을 덮어쓰게 된다는 것입니다. 예를 들어 "* */2 * * *"는 작업이 2시간마다 실행되는 것이 아니라 1분마다 실행된다는 의미입니다. 시간 비트는 2시간마다로 설정되지만 분 비트는 1분마다로 설정됩니다. 이는 여전히 작업이 1분마다 실행된다는 의미입니다. 마찬가지로 "*/5 */2 * * *"의 분 자리 설정은 시간 자리 설정보다 우선하며, 이는 5분마다 실행되고 시간 자리 "00" 설정을 무시함을 나타냅니다. */2 */5 * *" 요일 설정에 관계없이 매 2시간마다 작업이 실행됨을 나타냅니다.


12.2 crondtab file

crondtab file为任务定义文件。

(1).在此文件中,空行会被忽略,首个非空白字符且以#开头的行为注释行,但#不能出现在行中。

(2).可以在crontab file中设置环境变量,方式为"name=value",等号两边的空格可随意,即"name = value"也是允许的。但value中出现的空格必须使用引号包围。

(3). 默认crond命令启动的时候会初始化所有变量,除了某几个变量会被crond daemon自动设置好,其他所有变量都被设置为空值。自动设置的变量包括SHELL=/bin/sh,以及HOME和LOGNAME(在CentOS上则称为USER),后两者将被默认设置为/etc/passwd中指定的值。其中SHELL和HOME可以被crontab file中自定义的变量覆盖,但LOGNAME不允许覆盖。当然,自行定义的变量也会被加载到内存。

(4).除了LOGNAME/HOME/SHELL变量之外,如果设置了发送邮件,则crond还会寻找MAILTO变量。如果设置了MAILTO,则邮件将发送给此变量指定的地址,如果MAILTO定义的值为空(MAILTO=""),将不发送邮件,其他所有情况邮件都会发送给crontab file的所有者。

(5).在系统定时任务文件/etc/crontab中,默认已定义PATH环境变量和SHELL环境变量,其中PATH=/sbin:/bin:/usr/sbin:/usr/bin。

(6).crond daemon每分钟检测一次crontab file看是否有任务计划条目需要执行。

12.3 crond命令的调试

很多时候写了定时任务却发现没有执行,或者执行失败,但因为crond是后台运行的,有没有任何提示,很难进行排错。但是可以让crond运行在前端并进行调试的。

先说明下任务计划程序crond的默认执行方式。

使用下面三条命令启动的crond都是在后台运行的,且都不依赖于终端。

[root@xuexi ~]# systemctl start crond.service
[root@xuexi ~]# service crond start
[root@xuexi ~]# crond

但crond是允许接受选项的。

crond [-n] [-P] [-x flags]
选项说明:-n:让crond以前端方式运行,即不依赖于终端。-P:不重设环境变量PATH,而是从父进程中继承。-x:设置调试项,flags是调试方式,比较有用的方式是test和sch,即"-x test"和"-x sch"。
  :其中test调试将不会真正的执行,sch调试将可以看到等待时间。具体的见下面的示例。

先看看启动脚本启动crond的方式。

[root@server2 ~]# cat /lib/systemd/system/crond.service
[Unit]
Description=Command Scheduler
After=auditd.service systemd-user-sessions.service time-sync.target
 
[Service]EnvironmentFile=/etc/sysconfig/crond
ExecStart=/usr/sbin/crond -n $CRONDARGSExecReload=/bin/kill -HUP $MAINPID
KillMode=process

[Install]
WantedBy=multi-user.target

它的环境配置文件为/etc/sysconfig/crond,该文件中什么也没设置。

[root@server2 ~]# cat /etc/sysconfig/crond
# Settings for the CRON daemon.
# CRONDARGS= :  any extra command-line startup arguments for crond
CRONDARGS=

所有它的启动命令为:/usr/sbin/crond -n。但尽管此处加了"-n"选项,crond也不会前端运行,且不会依赖于终端,这是systemctl决定的。

在解释下如何进行调试。以下面的任务条目为例。

[root@server2 ~]# crontab -e* * * * * echo "hello world" >>/tmp/hello.txt

执行crond并带上调试选项test。

[root@server2 ~]# crond -x test
debug flags enabled: test
[4903] cron started
log_it: (CRON 4903) INFO (RANDOM_DELAY will be scaled with factor 8% if used.)
log_it: (CRON 4903) INFO (running with inotify support)
log_it: (CRON 4903) INFO (@reboot jobs will be run at computer's startup.)log_it: (root 4905) CMD (echo "hello world" >>/tmp/hello.txt )

执行crond并带上调试选项sch。

[root@server2 ~]# crond -x sch
debug flags enabled: sch
[4829] cron started
log_it: (CRON 4829) INFO (RANDOM_DELAY will be scaled with factor 73% if used.)
log_it: (CRON 4829) INFO (running with inotify support)
[4829] GMToff=28800log_it: (CRON 4829) INFO (@reboot jobs will be run at computer's startup.)[4829] Target time=1497950880, sec-to-wait=38      # 等待crond daemon下一次的检测,所以表示38秒后crond将检测crontab file
user [root:0:0:...] cmd="echo "hello world" >>/tmp/hello.txt "
[4829] Target time=1497950940, sec-to-wait=60Minute-ly job. Recording time 1497922081log_it: (root 4831) CMD (echo "hello world" >>/tmp/hello.txt )user [root:0:0:...] cmd="echo "hello world" >>/tmp/hello.txt "[4829] Target time=1497951000, sec-to-wait=60Minute-ly job. Recording time 1497922141log_it: (root 4833) CMD (echo "hello world" >>/tmp/hello.txt )

但要注意,在sch调试结果中的等待时间是crond这个daemon的检测时间,所以它表示等待下一次检测的时间,因此除了第一次,之后每次都是60秒,因为默认crond是每分钟检测一次crontab file的。例如,下面是某次的等待结果,在这几次等待检测过程中没有执行任何任务。

[4937] Target time=1497951720, sec-to-wait=18[4937] Target time=1497951780, sec-to-wait=60[4937] Target time=1497951840, sec-to-wait=60

还可以同时带多个调试方式,如:

[root@server2 ~]# crond -x test,schdebug flags enabled: sch test[4914] cron started
log_it: (CRON 4914) INFO (RANDOM_DELAY will be scaled with factor 21% if used.)
log_it: (CRON 4914) INFO (running with inotify support)
[4914] GMToff=28800log_it: (CRON 4914) INFO (@reboot jobs will be run at computer's startup.)[4914] Target time=1497951540, sec-to-wait=9
user [root:0:0:...] cmd="echo "hello world" >>/tmp/hello.txt "
[4914] Target time=1497951600, sec-to-wait=60Minute-ly job. Recording time 1497922741log_it: (root 4916) CMD (echo "hello world" >>/tmp/hello.txt )

这样在调试定时任务时间时,也不会真正执行命令。

12.4 精确到秒的任务计划

默认情况下,crond执行的任务只能精确到分钟,无法精确到秒。但通过技巧,也是能实现秒级任务的。

(1).方法一:不太精确的方法

写一个脚本,在脚本中sleep3秒钟的时间,这样能实现每3秒执行一次命令。

[root@xuexi ~]# cat /tmp/a.sh#!/bin/bash
#
PATH="$PATH:/usr/local/bin:/usr/local/sbin"for ((i=1;i<p class="cnblogs_code"></p><pre class="brush:php;toolbar:false">[root@xuexi ~]# cat /var/spool/cron/lisi* * * * * /bin/bash /tmp/a.sh

但是这样的方法不是最佳方法,因为执行命令也需要时间,且crond默认会有一个随机延时,随机延时由变量RANDOM_DELAY定义。

(2).方法二:在cron配置文件中写入多条sleep命令和其他命令。

[root@xuexi ~]# cat /var/spool/cron/lisi* * * * * ls /tmp* * * * * sleep 3 && ls /tmp* * * * * sleep 6 && ls /tmp* * * * * sleep 9 && ls /tmp* * * * * sleep 12 && ls /tmp* * * * * sleep 15 && ls /tmp* * * * * sleep 18 && ls /tmp* * * * * sleep 21 && ls /tmp* * * * * sleep 24 && ls /tmp* * * * * sleep 27 && ls /tmp* * * * * sleep 30 && ls /tmp
…* * * * * sleep 57 && ls /tmp

这种方式很繁琐,但是更精确。如果定义到每秒级别就得写60行cron记录。

由此能看出,秒级的任务本就不是crond所擅长的。实际上能用到秒级的任务也比较少。

위 내용은 예약된 작업에 대한 Linux 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
Linux 운영 : 시스템 관리 및 유지 보수Linux 운영 : 시스템 관리 및 유지 보수Apr 15, 2025 am 12:10 AM

Linux 시스템 관리 및 유지 보수의 주요 단계에는 다음이 포함됩니다. 1) 파일 시스템 구조 및 사용자 관리와 같은 기본 지식을 마스터합니다. 2) 시스템 모니터링 및 리소스 관리를 수행하고 Top, HTOP 및 기타 도구를 사용하십시오. 3) 시스템 로그를 사용하여 문제를 해결하고 JournalCTL 및 기타 도구를 사용하십시오. 4) 자동 스크립트 및 작업 스케줄링을 작성하고 CRON 도구를 사용하십시오. 5) 보안 관리 및 보호 구현, iptables를 통해 방화벽을 구성합니다. 6) 성능 최적화 및 모범 사례를 수행하고 커널 매개 변수를 조정하며 좋은 습관을 개발하십시오.

Linux의 유지 관리 모드 이해 : 필수 요소Linux의 유지 관리 모드 이해 : 필수 요소Apr 14, 2025 am 12:04 AM

시작시 init =/bin/bash 또는 단일 매개 변수를 추가하여 Linux 유지 관리 모드가 입력됩니다. 1. 유지 보수 모드를 입력하십시오 : 그루브 메뉴를 편집하고 시작 매개 변수를 추가하십시오. 2. 파일 시스템을 다시 마운트하여 읽고 쓰기 모드 : MOUNT-OREMOUNT, RW/. 3. 파일 시스템 수리 : FSCK/DEV/SDA1과 같은 FSCK 명령을 사용하십시오. 4. 데이터 손실을 피하기 위해 데이터를 백업하고주의해서 작동합니다.

Debian이 Hadoop 데이터 처리 속도를 향상시키는 방법Debian이 Hadoop 데이터 처리 속도를 향상시키는 방법Apr 13, 2025 am 11:54 AM

이 기사에서는 데비안 시스템에서 Hadoop 데이터 처리 효율성을 향상시키는 방법에 대해 설명합니다. 최적화 전략에는 하드웨어 업그레이드, 운영 체제 매개 변수 조정, Hadoop 구성 수정 및 효율적인 알고리즘 및 도구 사용이 포함됩니다. 1. 하드웨어 리소스 강화는 모든 노드에 일관된 하드웨어 구성, 특히 CPU, 메모리 및 네트워크 장비 성능에주의를 기울일 수 있도록합니다. 전반적인 처리 속도를 향상시키기 위해서는 고성능 하드웨어 구성 요소를 선택하는 것이 필수적입니다. 2. 운영 체제 조정 파일 설명 자 및 네트워크 연결 : /etc/security/limits.conf 파일을 수정하여 파일 설명자의 상한을 늘리고 동시에 시스템에 의해 열 수 있습니다. JVM 매개 변수 조정 : Hadoop-env.sh 파일에서 조정

데비안 syslog를 배우는 방법데비안 syslog를 배우는 방법Apr 13, 2025 am 11:51 AM

이 안내서는 데비안 시스템에서 syslog를 사용하는 방법을 배우도록 안내합니다. Syslog는 로깅 시스템 및 응용 프로그램 로그 메시지를위한 Linux 시스템의 핵심 서비스입니다. 관리자가 시스템 활동을 모니터링하고 분석하여 문제를 신속하게 식별하고 해결하는 데 도움이됩니다. 1. syslog에 대한 기본 지식 syslog의 핵심 기능에는 다음이 포함됩니다. 로그 메시지 중앙 수집 및 관리; 다중 로그 출력 형식 및 대상 위치 (예 : 파일 또는 네트워크) 지원; 실시간 로그보기 및 필터링 기능 제공. 2. Syslog 설치 및 구성 (RSYSLOG 사용) Debian 시스템은 기본적으로 RSYSLOG를 사용합니다. 다음 명령으로 설치할 수 있습니다 : sudoaptupdatesud

데비안에서 Hadoop 버전을 선택하는 방법데비안에서 Hadoop 버전을 선택하는 방법Apr 13, 2025 am 11:48 AM

데비안 시스템에 적합한 Hadoop 버전을 선택할 때는 다음과 같은 주요 요소를 고려해야합니다. 1. 안정성 및 장기 지원 : 안정성과 보안을 추구하는 사용자의 경우 Debian11 (Bullseye)과 같은 데비안 안정 버전을 선택하는 것이 좋습니다. 이 버전은 완전히 테스트되었으며 최대 5 년의 지원주기가있어 시스템의 안정적인 작동을 보장 할 수 있습니다. 2. 패키지 업데이트 속도 : 최신 Hadoop 기능 및 기능을 사용해야하는 경우 Debian의 불안정한 버전 (SID)을 고려할 수 있습니다. 그러나 불안정한 버전에는 호환성 문제와 안정성 위험이있을 수 있습니다. 3. 커뮤니티 지원 및 자원 : 데비안은 풍부한 문서를 제공하고

Debian의 Tigervnc 공유 파일 메소드Debian의 Tigervnc 공유 파일 메소드Apr 13, 2025 am 11:45 AM

이 기사에서는 Tigervnc를 사용하여 데비안 시스템에서 파일을 공유하는 방법에 대해 설명합니다. 먼저 tigervnc 서버를 설치 한 다음 구성해야합니다. 1. TigervNC 서버를 설치하고 터미널을 엽니 다. 소프트웨어 패키지 목록 업데이트 : sudoaptupdate tigervnc 서버를 설치하려면 : sudoaptinstalltigervnc-standalone-servertigervnc-common 2. VNC 서버 비밀번호를 설정하도록 tigervnc 서버 구성 : vncpasswd vnc 서버 : vncserver : 1-localhostno

데비안 메일 서버 방화벽 구성 팁데비안 메일 서버 방화벽 구성 팁Apr 13, 2025 am 11:42 AM

데비안 메일 서버의 방화벽 구성은 서버 보안을 보장하는 데 중요한 단계입니다. 다음은 iptables 및 방화구 사용을 포함하여 일반적으로 사용되는 여러 방화벽 구성 방법입니다. iptables를 사용하여 iptables를 설치하도록 방화벽을 구성하십시오 (아직 설치되지 않은 경우) : sudoapt-getupdatesudoapt-getinstalliptablesview 현재 iptables 규칙 : sudoiptables-l configuration

데비안 메일 서버 SSL 인증서 설치 방법데비안 메일 서버 SSL 인증서 설치 방법Apr 13, 2025 am 11:39 AM

Debian Mail 서버에 SSL 인증서를 설치하는 단계는 다음과 같습니다. 1. OpenSSL 툴킷을 먼저 설치하십시오. 먼저 OpenSSL 툴킷이 이미 시스템에 설치되어 있는지 확인하십시오. 설치되지 않은 경우 다음 명령을 사용하여 설치할 수 있습니다. 개인 키 및 인증서 요청 생성 다음에 다음, OpenSSL을 사용하여 2048 비트 RSA 개인 키 및 인증서 요청 (CSR)을 생성합니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는