Ubuntu 데스크탑 시스템에서 첫 번째 cron을 설정하고 있습니다. cron이 실행되기 전에 폴더를 잠그는 방법과 설정 방법이 있는지 알고 싶습니다. 나는 팔로우하고 있다이것기사. 공유 네트워크에 있기 때문에 파일을 cron 폴더 밖으로 이동할 때 파일이 손상되지 않았는지 확인하고 싶습니다.
답변1
파일에 액세스하기 전 잠금 및 지연 기능이 포함된 간단한 스크립트:
#!/bin/sh
if mkdir /tmp/myscript-running; then
cd /mnt/share/whereever
find . -type f -mmin +1 -print0 | xargs -i -n 1 -0 myscript.sh "{}"
rmdir /tmp/myscript-running
else
: # previous instance still running, do nothing
fi
find
이 옵션에는 GNU 또는 이와 동등한 것이 필요합니다 -mmin
. 필요한 경우 cron을 통해 이 명령을 실행할 수 있습니다. myscript.sh
처리 스크립트로 바꾸세요 .
주요 기능은 다음과 같습니다.
mkdir
인스턴스가 겹치는 것을 방지하기 위해 잠긴 디렉터리를 만드는 데 사용됩니다.find
with를 사용-mmin +1
하면 1분 이상 전에 수정된 파일로 출력을 제한할 수 있습니다. 이는 새 파일이 완전히 복사되었는지 확인하기 위한 것입니다.xargs
한 번에 하나의 파일을 처리하는 데 사용되며"{}"
파일 이름을 다음으로 바꿉니다.- 성가신 파일 이름으로 인해 문제가 발생하지 않도록
\0
종료된 파일 이름을 사용하세요 .find | xargs
find
필요에 맞게 매개변수를 수정할 수 있어야 합니다 . 위의 논리를 사용하여 완성된 파일을 " uploading/
" 디렉터리 에서 " " 디렉터리로 이동할 수도 있으며 ready/
, 이는 작업을 단순화할 수 있습니다.
우분투에는 또한 유용할 수 있는 및 이 있습니다 lockfile
. shlock
더 많은 아이디어를 보려면 후자에 대한 매뉴얼 페이지를 참조하세요.
답변2
이상적이지는 않지만 작동합니다. 새 파일이 네트워크에 복사되면 새 파일이 복사되는 별도의 "피드" 디렉터리가 생깁니다. 그런 다음 cron 스크립트는 /var/feeder의 /ls를 실행한 다음 해당 디렉터리에 있는 모든 파일의 ls를 실행하여 열린 파일 핸들을 찾을 수 있습니다. 그런 다음 사용하지 않는 파일은 기본 공유 디렉터리로 이동되고 열려 있는 파일(해당 파일 또는 일부 파일을 복사한다고 가정)은 피더에 남아 있습니다. home/shared 디렉토리가 스크립트를 제외하고는 쓸 수 없는지 확인하면 괜찮을 것입니다.
답변3
Linux에서 폴더를 잠그는 방법에 대한 단계별 가이드 http://linux-all-over.blogspot.in/2014/10/how-to-lock-filefolder-in-linux-kali.html