Ubuntu에서 이미지 압축 작업으로 인해 CronTab이 실패합니다. "/bin/bash^M: 잘못된 해석기: 해당 파일 또는 디렉터리가 없습니다."

Ubuntu에서 이미지 압축 작업으로 인해 CronTab이 실패합니다. "/bin/bash^M: 잘못된 해석기: 해당 파일 또는 디렉터리가 없습니다."

다음 스크립트를 실행하기 위해 cronjob을 설정하려고 합니다. 이 스크립트의 기능은 WordPress 디렉토리에서 png 및 jpg 파일을 찾아 압축하는 것입니다.

    #!/bin/bash
echo `date` >> /root/optipng.log
find /home/ghost/wp-content/uploads -mtime -2 -iname '*.png' -print0 | \
 xargs -0 optipng -o7 -log /root/optipng.log -preserve
echo `date` >> /root/jpegoptim.log
find /home/ghost/wp-content/uploads  -mtime -2 -iname '*.jpg' -print0 | \
 xargs -0 jpegoptim --max=90 --preserve --totals >> /root/jpegoptim.log

그래서 파일을 만들었어요"최적화.sh"/usr/local 디렉토리에서 실행"크론탭 -e"라고 말하고 다음 명령을 추가했습니다.

00 10 * * *  root  /usr/local/optimize.sh

이것은 매일 10시에 이미지 최적화를 실행하도록 되어 있지만 이 경우에는 작동하지 않습니다. 심지어 위 명령을 다음과 같이 수정하여 로그 파일을 생성해 보았습니다.

00 10 * * *  root  /usr/local/optimize.sh &>/var/log/cron.log

로그 파일이 비어 있고 크론 작업이 실행되고 있지 않습니다. Stack Overflow에 언급된 다른 방법을 시도했지만 그 중 아무 것도 작동하지 않는 것 같습니다. 또한 도움을 얻기 위해 찾아본 다른 튜토리얼도 나열했습니다.

https://askubuntu.com/questions/28995/setup-cron-weekly-backup

http://seravo.fi/2013/tips-to-optimize-images-for-faster-loading-websites

누군가 오류가 어디에 있는지 지적할 수 있습니까? :)

추신 - /usr/local/optimize.sh 파일에 700 권한을 부여하고 ssh를 통해 파일을 직접 실행하려고 시도했지만 다음 오류가 반환되었습니다.

/bin/bash^M: bad interpreter: No such file or directory

다음은 Nano 편집기를 사용하여 명령을 작성하는 방법을 정확하게 보여주는 그림입니다. 스크립트에는 공백이 없습니다.

이 질문은 다음과 같은 Stack Overflow의 다른 질문과 다릅니다.이 crontab 작업이 실행되지 않는 이유는 무엇입니까?어떤 의미에서는 cron 파일을 작성하는 방식으로 인해 오류가 발생하는 것이 아니라 Optimization.sh 파일에 숨겨진 공백이 일부 있습니다.

답변1

여전히 많은 문제가 있습니다:

  1. Windows 컴퓨터에서 벌금을 생성하고 서버에 복사했습니다. "텍스트 전송" 모드가 없으면 각 줄은 CR/LF 끝으로 남습니다. 다른 사람들이 제안한 것처럼 dos2unix파일을 실행하면 문제가 해결됩니다.

  2. 다른 사람들이 이미 제안한 것처럼 #!에서 선행 공백 줄을 제거하십시오.

  3. /var/log/cron.log에 쓰지 마십시오. 이는 시스템 로그 파일이므로 기록해서는 안 됩니다.

  4. chmod -R 777단일 파일을 실행 가능하게 만드는 데 사용하지 마십시오 . 대신에 chmod 755또는 더 나은 chmod a+x.

  5. crontab -e다른 사람들은 시스템을 사용할 때 귀하가 누구인지 알고 있으므로 crontab사용자 이름이 형식에 포함되어서는 안된다고 지적했습니다 .

  6. echo `date`단순히 생각 하기 보다는 date.

답변2

업데이트(채팅에서):

귀하의 질문 시작 부분에 공백이 표시됩니다. #!/bin/bash공백이 없는지 확인하세요. 또한 Windows에서 Linux로 복사한 경우 다음 명령을 실행하고 모든 ^M문자를 제거한 후 스크립트를 다시 실행해 보세요.

    sed -i s/{ctrl+v}{ctrl+m}// /usr/local/optimize.sh

또는 이미 dos2unix실행한 경우:

    dos2unix /usr/local/optimize.sh



매주 금요일 오전 10시에 이 작업을 실행합니다.

sh 명령은 매주 금요일 오전 10시에 실행됩니다.

내 생각에 당신이 원하는 것은 다음과 같습니다.

00 10 * * *  /usr/local/optimize.sh > /var/log/cron.log 2>&1

답변3

크론 라인의 형식이 잘못되었습니다. 예는 다음과 같습니다.

0 5 * * 1 tar -zcf /var/backups/home.tgz /home/

즉, 사용자의 이름을 지정하지 말고 /etc/crontab에 행을 추가하는 경우에만 사용자 이름을 입력하십시오. 그러나 이를 사용하는 경우 crontab -e현재 사용자의 crontab 파일에 추가됩니다.

관련 정보