cron으로 스크립트를 실행하자

cron으로 스크립트를 실행하자

crontab 항목을 기반으로 실행할 스크립트를 얻으려고합니다. 내 스크립트는 터미널에서 제대로 실행되지만 cron 항목을 기반으로 자동으로 실행되지 않습니다. 스크립트는 매 시간마다 /testexport1 디렉터리에 빈 파일을 만듭니다.

다음과 같이 crontab -e를 사용하여 crontab을 편집합니다.

30 * * * * /bin/bash/ /testexport1/./createfilescript.sh

스크립트 자체는 다음과 같습니다.

[root@centostest testexport1]# cat createfilescript.sh
#!/bin/bash

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/testexport1

today="$( date +"%Y%m%d" )"
number=0

while test -e "$today$suffix.txt"; do
    (( ++number ))
    suffix="$( printf -- '-%02d' "$number" )"
done

fname="$today$suffix.txt"

printf 'Will use "%s" as filename\n' "$fname"
touch "$fname"

스크립트가 실행되어야 하는 위치를 지정하기 위해 스크립트 상단에 PATH 섹션을 추가했습니다(내가 읽은 다른 기사를 기반으로 함).

이 crontab 항목이 스크립트를 실행하지 않는 것 같은 이유를 아시나요? 나는 이것이 간단한 수정이라고 확신하지만 지금은 원을 그리며 가고 있습니다.

답변1

/bin/bash/crontab은 스크립트를 찾을 수 없기 때문에 스크립트를 실행하지 않았습니다 . 이는 ( /bin/bash끝 부분에 누락된 내용 확인) 또는 시스템에 있는 올바른 경로 로 변경되어야 합니다 ./bash

또한 스크립트에서 사용하는 모든 유틸리티가 실제로 $PATH설정에서 발견되는지 확인하세요. 더 일반적으로조정경로를 덮어쓰는 대신 경로를 덮어쓰는 것이 좋습니다. 시스템 경로에는 touch유사한 콘텐츠를 찾을 수 있는 디렉터리가 포함되는 경우가 많기 때문입니다.

답변2

date바이너리 touch는 에 있으며 /bin귀하의 것이 아닙니다 $PATH.

답변3

댓글을 추가하려고 했는데 아직 할 수 없어서...

cron에서 실행 중이기 때문에 cron은 파일이 어느 폴더에 생성될지 알 수 없으므로 스크립트 시작 부분에서 해당 디렉터리로 변경하기만 하면 문제가 해결됩니다.

[root@centostest testexport1]# cat createfilescript.sh
#!/bin/bash

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/testexport1

cd  /testexport1

today="$( date +"%Y%m%d" )"
number=0

while test -e "$today$suffix.txt"; do
    (( ++number ))
    suffix="$( printf -- '-%02d' "$number" )"
done

fname="$today$suffix.txt"

printf 'Will use "%s" as filename\n' "$fname"
touch "$fname"

또 다른 것은 cron 라인입니다:

30      *       *       *       *       /bin/bash/ /testexport1/./createfilescript.sh

스크립트가 /testexport1/에 있는 경우 cron 줄을 다음과 같이 변경합니다.

30      *       *       *       *       /bin/bash /testexport1/createfilescript.sh

관련 정보