저는 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으로 실행하고 ls
command와 같은 다른 명령을 사용해도 동일한 오류가 발생하는지 확인하세요.