cronjob에서 bash 함수 명령을 찾을 수 없습니다.

cronjob에서 bash 함수 명령을 찾을 수 없습니다.

내 crontab에는 다음 bash 기능이 설정되어 내 작업에 적용되었습니다. 로그에 타임스탬프를 추가함을 나타냅니다.

adddate() {
    while IFS= read -r line; do
        printf '%s %s\n' "$(date)" "$line";
    done
}

30 06 * * * root $binPath/zsh/test.zsh | adddate 1>>$logPath/log.csv 2>>$errorLogPath/error.txt

error.txt 그런데 bash 기능이 제대로 작동하지 않는 걸 보니 .

/bin/bash: adddate: command not found

이 모든 것의 근본 원인은 무엇입니까?

누구든지 의견이 있으면 알려주시기 바랍니다.

감사해요

답변1

Cron은 쉘 기능을 허용하지 않습니다. 다음과 같은 스크립트를 작성하십시오.

#!/bin/bash
adddate() {
    while IFS= read -r line; do
        printf '%s %s\n' "$(date)" "$line";
    done
}
$binPath/zsh/test.zsh | adddate 1>>$logPath/log.csv 2>>$errorLogPath/error.txt

그리고 cron에 넣어주세요.

$binPath(이 문제를 해결하기 위해 및 here 를 사용하고 있다고 가정합니다 $logPath. 그렇지 않은 경우 스크립트에서 설정해야 합니다.)

SHELL=/bin/bash당신 의crontab 가능한쉘 함수를 사용하는 방법입니다.
(나는 그것을 시도하지 않았습니다. 그것이 작동한다면 놀랄 것입니다). 그러나 그것이 효과가 있다고 해도 나는 그것을 추천하지 않을 것입니다.

답변2

함수 대신 별칭을 사용할 수 있습니다.

홈 디렉터리에 .profile 또는 .bashrc 파일을 추가합니다.

alias adddate="while IFS= read -r line; do printf '%s %s\n' "$(date)" "$line"; done"

그런 다음 crontab에서:

30 06 * * * shopt -s expand_aliases; root $binPath/zsh/test.zsh | adddate 1>>$logPath/log.csv 2>>$errorLogPath/error.txt

일반적으로 crontab(즉, 비대화형 쉘)도 별칭을 허용하지 않지만 shopt -s expand_aliases.

관련 정보