crontab에서 쉘을 실행하면 다른 쉘 프로그램 호출이 실패합니다.

crontab에서 쉘을 실행하면 다른 쉘 프로그램 호출이 실패합니다.

나는 다음과 같이 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하기 때문에 전혀 중요하지 않습니다 .sourcerun.sh

질문에서 묻는 것처럼 귀하에게는 run.sh-line 이 전혀 없습니다. #!읽어야 할 댓글이 있어요

#/bin/bash

첫 번째 줄로.

이는 실행될 것임을 의미합니다 /bin/sh. 쉘 에는 명령이 /bin/sh없으므로 sourcecron이 스크립트를 실행할 때 스크립트에서 일종의 "명령을 찾을 수 없음" 오류가 발생해야 합니다(루트 이메일 확인).

관련된:

관련 정보