crontab을 사용하여 /var/www/html에 zip 파일 만들기

crontab을 사용하여 /var/www/html에 zip 파일 만들기

제목에서 설명하듯이 하루에 한 번씩 파일을 가져와서 zip 아카이브에 넣어야 합니다. 또한 zip 파일을 /var/www/html로 이동해야 하며, 여기서 .php 스크립트를 사용하면 사용자가 다운로드할 수 있습니다.

이것을 가정하면:

  • 파일의 절대 경로는/home/myuser/working-directory/file.txt
  • cronjob을 사용하여 실행하는 데 필요한 모든 스크립트 파일을/usr/scripts
  • /var/www/html에 관리 권한이 필요하기 sudo crontab -e때문에 대신 을 사용하여 다음 cronjob을 프로그래밍했습니다.crontab -e

내 생각의 결과는 다음과 같습니다.

create-zip.sh

#!/bin/bash

cp /home/myuser/myworkingdir/file.txt /home/myuser/file.txt && cd /home/myuser && zip my-zip-file-$(date "+%b_%d_%Y_%H.%M.%S").zip file.txt && rm file.txt && rm /var/www/html/my-zip-file*.zip && mv my-zip-file*.zip /var/www/html && cd

sudo crontab -e

@daily sh /usr/scripts/create-zip.sh

음.. 작동하지 않습니다. file.txt에 복사 /home/myuser되고 zip도 생성되기 때문에 문제는 권한과 관련된 문제라고 생각합니다 . 하지만 /var/www/htmlcrontab이 루트 권한으로 실행 중이더라도 zip을 로 이동할 수 없습니다 .

어떤 아이디어?

또한...zip은 하루에 한 번 생성되므로 새 파일을 이동하기 전에 /var/www/html에서 이전 .zip을 제거해야 합니다. 나는 사용해 보았다.

rm /var/www/html my-zip-file-*.zip

(위의 create-zip.sh를 확인하세요) 그래도 작동하지 않습니다.. 그래서 권한에 문제가 있는 것 같아요. /var/www/html은 www-data 그룹에 속해 있으며 소유자도 www-data입니다.

답변1

명령을 결합한다는 것은 &&오른쪽 명령이 왼쪽 명령이 성공한 경우에만 실행된다는 의미입니다. 이는 zip 파일이 없기 때문에 crontab이 처음 실행될 때 실패하므로 /var/www/html/실패 rm /var/www/html/my-zip-file*.zip하고 mv실행되지 않음을 의미합니다.

따라서 삭제할 수 있는 올바른 이름의 파일을 생성하고 동일한 cron 명령을 유지할 수 있습니다.

touch /var/www/html/my-zip-file.zip

또는 다음 ;대신 사용할 수 있습니다 &&.

cp /home/myuser/myworkingdir/file.txt /home/myuser/file.txt && 
cd /home/myuser && 
zip my-zip-file-$(date "+%b_%d_%Y_%H.%M.%S").zip file.txt && 
rm file.txt && 
rm /var/www/html/my-zip-file*.zip ; 
mv my-zip-file*.zip /var/www/html && cd

또한 이 방법을 필요한 것보다 더 복잡하게 만들고 있습니다. to를 압축하는 데만 사용하고 삭제하는 것이기 때문에 /home/myuser/myworkingdir/file.txtto 를 복사하는 것은 불필요합니다. /home/myuser/file.txt명령은 cd필요하지 않으며 전체 경로를 사용할 수 있습니다. cd결국에는 그럴 이유도 없습니다 . 필요한 것은 대상 디렉터리에서 zip 파일을 제거하는 명령 하나와 해당 파일을 압축하는 명령 하나뿐입니다.

rm /var/www/html/my-zip-file*.zip &&
 zip /var/www/htmlmy-zip-file-$(date "+%b_%d_%Y_%H.%M.%S").zip /home/myuser/myworkingdir/file.txt

관련 정보