나는 다음과 같이 run.sh 프로그램을 실행할 계획입니다:
16 09 07 * * root /opt/db_maintain/run.sh > /opt/db_maintain/temp-log
이것은 run.sh입니다:
#/bin/bash
#********* Saman *********
TM=$(date --date='40 days ago' '+%F %T')
TARGET=/opt/db_maintain/main.sh
source $TARGET "$TM"
또한 다음 파일에 대한 실행 권한도 부여했습니다. run.sh main.sh
프로그램을 수동으로 실행하면 문제 없이 run.sh에서 main.sh로 리디렉션됩니다. 그런데 스케줄링을 하고 나면 확인을 위해 run.sh에 echo 문을 몇 개 넣어서 crontab이 성공적으로 실행되는데, main.sh 실행 권한을 부여해도 왜 run.sh가 main.sh로 리다이렉트가 안되는지 모르겠습니다.
어떤 아이디어가 있나요?
업데이트: 문제를 발견했지만 왜 그런 일이 발생했는지 모르겠습니다. run.sh에서는 #!/bin/bash를 썼는데, main.sh에서는 run.sh의 #!/bin/bash를 #!/usr로 변경한 후 #!/usr/bin/env bash를 썼습니다. /bin/env bash 작동이 시작되었습니다. 왜 이런 일이 발생합니까? 그들 사이의 차이점은 무엇입니까?
답변1
-line #!
in은 와 동일한 실행 환경에서 실행 main.sh
하기 때문에 전혀 중요하지 않습니다 .source
run.sh
질문에서 묻는 것처럼 귀하에게는 run.sh
-line 이 전혀 없습니다. #!
읽어야 할 댓글이 있어요
#/bin/bash
첫 번째 줄로.
이는 실행될 것임을 의미합니다 /bin/sh
. 쉘 에는 명령이 /bin/sh
없으므로 source
cron이 스크립트를 실행할 때 스크립트에서 일종의 "명령을 찾을 수 없음" 오류가 발생해야 합니다(루트 이메일 확인).
관련된: