Bash 파일에서 find 명령 사용 [닫기]

Bash 파일에서 find 명령 사용 [닫기]

저는 Linux 상자에서 이 스크립트를 사용하여 어제 수정된 모든 파일을 찾습니다.

#!/bin/bash
find /home/*/domains/*/public_html/  -name "*.php" -mtime -1 | while read line; do
echo "$line"
done

수동으로 실행하면 스크립트가 예상대로 작동하지만 다음 위치에서 실행하면 다음 오류와 함께 실패합니다 cron.

find: `/home/*/domains/*/public_html/': No such file or directory

배포판: Centos 5

예약 된 일들:

#DO NOT EDIT THIS FILE. Change through DirectAdmin
[email protected]
*/1 * * * * bash /home/admin/check_phpfile_changed.sh

작은따옴표는 작동하지 않습니다.

답변1

cron 유틸리티는 쉘 환경과 다른 환경에서 명령을 실행하며, 기본 쉘과 다른 쉘을 사용할 수도 있습니다. cron 환경을 보려면 이 env명령을 사용할 수 있습니다. 예를 들어 다음 crontab을 추가합니다.

* * * * * env > ~/cronenv

잠시 후 ~/cronenv파일을 확인하여 cron 환경을 확인합니다(다음에서 가져옴).cron이 스크립트를 실행하는 환경을 시뮬레이션하는 방법은 무엇입니까?). cron 관련 오류를 디버깅하는 데 도움이 되도록 이를 쉘 환경과 비교할 수 있습니다. cron 환경을 사용하여 스크립트를 직접 실행할 수도 있습니다.

env - `cat ~/cronenv` /bin/sh

디버깅을 위해 스크립트를 수정해 볼 수도 있습니다.

#!/bin/bash
ls -ld /home/*
ls -ld /home/*/domains/*
find /home/*/domains/*/public_html/  -name "*.php" -mtime -1 | while read line; do
    echo "$line"
done

cronjob으로 실행하고 lscommand와 같은 다른 명령을 사용해도 동일한 오류가 발생하는지 확인하세요.

관련 정보