링크 ux 는 flock 파일 잠 금 을 사용 하여 crontab 충돌 문 제 를 해결 합 니 다.
현재 문제 가 있 습 니 다. 매 분 에 한 번 씩 임 무 를 수행 하도록 설정 되 어 있 지만 1 분 안에 임 무 를 수행 하지 못 할 수도 있 습 니 다. 이 때 시스템 은 다시 임 무 를 수행 합 니 다.두 개의 같은 임 무 를 수행 하 게 만 들 었 다.
예 를 들 면:
<?
// test.php
for($i=0; $i<300; $i++){
echo date('Y-m-d H:i:s')."\r
";
sleep(1);
}
?>
300 회 순환 하고 한 번 순환 할 때마다 1 초 동안 잠 을 잔다.실행 완료 까지 는 300 초 즉 5 분 이 걸린다.
분당 실행 할 crontab 설정
* * * * * php /home/fdipzone/php/test.php >> /home/fdipzone/php/test.log
2 분 후, 사용 ps aux | grep test. php 를 보면 두 개의 test. php 프로 세 스 가 실행 되 고 있 습 니 다.
3 분 후에 3 개의 test. php 프로 세 스 가 실행 되 고 있 는 것 을 보 았 습 니 다.
fdipzone@ubuntu:/tmp$ ps aux|grep test.php
fdipzone 2995 0.0 0.0 4220 588 ? Ss 00:28 0:00 /bin/sh -c php /home/fdipzone/php/test.php >> /home/fdipzone/php/test.log
fdipzone 2996 0.0 0.8 108328 8564 ? S 00:28 0:00 php /home/fdipzone/php/test.php
fdipzone 3033 0.0 0.0 4220 584 ? Ss 00:29 0:00 /bin/sh -c php /home/fdipzone/php/test.php >> /home/fdipzone/php/test.log
fdipzone 3034 0.1 0.8 108328 8564 ? S 00:29 0:00 php /home/fdipzone/php/test.php
fdipzone 3047 0.0 0.0 4220 588 ? Ss 00:30 0:00 /bin/sh -c php /home/fdipzone/php/test.php >> /home/fdipzone/php/test.log
fdipzone 3048 1.3 0.8 108328 8560 ? S 00:30 0:00 php /home/fdipzone/php/test.php
fdipzone 3051 0.0 0.1 13148 1068 pts/0 S+ 00:30 0:00 grep --color=auto test.php
우 리 는 지난 임 무 를 수행 하고 다음 임 무 를 수행 하 기 를 바 랍 니 다. 만약 에 지난 임 무 를 수행 하지 않 으 면 이번 임 무 는 집행 하지 않 고 다음 주기 까지 판단 합 니 다. 만약 에 지난 임 무 를 수행 하면 다음 임 무 를 수행 할 수 있 습 니 다.
개선 방법
우 리 는 작업 수행 여 부 를 기록 하기 위해 잠 금 파일 을 사용 할 수 있다.
먼저/tmp/my test. lock 이 존재 하 는 지 여 부 를 판단 하고 존재 하지 않 으 면 생 성 한 다음 작업 을 수행 하고 작업 을 수행 한 후 잠 금 파일 을 삭제 합 니 다.
잠 금 파일 이 존재 한다 면 이번 작업 을 종료 합 니 다.
<?php
$lockfile = '/tmp/mytest.lock';
if(file_exists($lockfile)){
exit();
}else{
file_put_contents($lockfile, 1, true);
}
for($i=0; $i<300; $i++){
echo date('Y-m-d H:i:s')."\r
";
sleep(1);
}
unlink($lockfile);
?>
이렇게 하면 확실히 임 무 를 수행 하 는 동안 새로운 임 무 를 수행 하지 않 을 것 이 라 고 보장 할 수 있 지만, 이렇게 하려 면 작업 파일 에 코드 를 써 서 판단 해 야 하기 때문에 불편 하 다.미 션 잠 금 판단 을 미 션 밖 에 두 면 안 될까요?
링크 ux flock 파일 잠 금 을 사용 하여 작업 잠 금 을 실현 하고 충돌 을 해결 합 니 다.
형식:
flock [-sxun][-w #] fd#
flock [-sxon][-w #] file [-c] command
옵션
-s, --shared:
-x, --exclusive:
-u, --unlock: , ,
-n, --nonblock: ,
-w, --timeout: ,
-o, --close: 。
-c, --command: shell
-h, --help
-V, --version:
첫 번 째 test. php 를 계속 사용 합 니 다. 파일 자 물 쇠 는 독점 자 물 쇠 를 사용 합 니 다. 잠 그 면 기다 리 지 않 습 니 다.매개 변 수 는 - xn
* * * * * flock -xn /tmp/mytest.lock -c 'php /home/fdipzone/php/test.php >> /home/fdipzone/php/test.log'
이렇게 하면 작업 이 완료 되 지 않 았 을 때 다음 작업 은/tmp/my test. lock 이 잠 겨 있 으 면 현재 작업 을 끝내 고 다음 주기 에 판단 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
용감한 바로 가기 및 우분투 응용 프로그램안녕하세요 여러분, 이 기사에서는 모든 사이트에서 pwa를 생성하고 실행기 응용 프로그램으로 추가하는 방법을 설명하고 싶습니다. 일부 웹사이트는 PWA로 설치를 허용하지 않지만 유사한 애플리케이션을 원합니다. 1. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.