/etc/cron/(d)의 기본 사용법: /etc/cron의 올바른 모드(일일/주별/월별)

/etc/cron/(d)의 기본 사용법: /etc/cron의 올바른 모드(일일/주별/월별)

저는 Bash와 함께 Ubuntu 16.04를 사용하여 확장자가 없고 shebangless 파일을 만들었습니다 /etc/cron.daily/cron_daily.

for dir in "$drt"/*/; do
if pushd "$dir"; then
wp plugin update --all --allow-root
wp core update --allow-root
wp language core update --allow-root
wp theme update --all --allow-root
popd
fi
done
"$rse"

내가 이렇게 하는 이유 는 혼란 을 줄이기 위해서 입니다 crontab.

파일 이름이 안전한지, 전체적인 구문과 변수 확장이 정상적인지 여쭤보고 싶습니다.


drt변수는 rse해당 파일을 가져와 사용할 수 있게 된 후에 내보내집니다.

답변1

내가 액세스할 수 있는 Ubuntu 시스템의 동일한 위치에 있는 다른 스크립트를 살펴보면 이것이 적절한 쉘 스크립트임이 분명합니다. 실행 가능해야 하며 #!올바른 인터프리터를 가리키는 -라인이 있어야 합니다.

너가 ~ 한 뒤로예상되는변수가 drt어떤 값으로 설정되어 있다면 실제로 설정되어 있는지 확인하고 합리적인 값으로 설정해야 합니다. 예를 들어, if는 $drt기존 디렉터리의 경로 이름이어야 합니다.

if [ ! -d "$drt" ]; then
    echo 'drt is unset or does not contain path to directory' >&2
    exit 1
fi

동일 rse:

if [ -z "$rse" ]; then
    echo 'rse is unset' >&2
    exit 1
fi

이 작업은 스크립트 시작 부분에서 수행됩니다.

디렉토리 확인

pushd주로 popd대화형 사용을 위한 것입니다(논란의 여지가 있을 수 있음). 또한 디렉토리를 앞뒤로 변경하는 스크립트를 읽고 유지하는 것도 어렵습니다. 이 스크립트에는 없을 수도 있지만 일반적으로 그렇습니다.

작업 디렉토리를 변경하고 뭔가를 한 다음 다시 변경하는 대신 다음 명령을 사용할 수 있습니다.

( cd "some directory" && "some other command" )

위의 내용은 서브쉘 cd에만 영향을 미칩니다 ( ... ).

이 스크립트에서는 충분할 수 있습니다.

if cd "$dir"; then
    command1
    command2
    # etc.
fi

이것이 $drt절대 경로이고 간단한 명령이 시작 위치에 관계없이 올바르게 실행된다고 가정합니다(이것은 - 문 뒤의 수정된 작업 디렉터리 $rse에 스크립트를 남깁니다 ). if다른 스크립트가 /etc/cron.daily/어떻게 작동하는지 확인하세요(위의 제안은 /etc/cron.daily/dpkg스크립트가 작동하는 방식이지만 - 문 뒤에는 다른 명령이 없습니다 if).

for-loop 및 -statement 본문을 적절하게 들여쓰면 스크립트에 이점이 있습니다 if.

원본 예제 코드를 사용하면 다음과 같이 수행할 수 있습니다.

#!/bin/bash
for dir in "$drt"/*/; do
    if pushd "$dir"; then
        wp plugin update --all --allow-root
        wp core update --allow-root
        wp language core update --allow-root
        wp theme update --all --allow-root
        popd
    fi
done
"$rse"

들여쓰기는 공백이나 탭을 사용하여 수행할 수 있습니다(취향에 따라 다름).

또한 이 게시물을 작성하는 동안 변수 이름을 여러 번 잘못 입력했습니다. 설명적인 변수 이름을 갖는 것은 당신 자신(몇 주 후)과 스크립트가 무엇을 해야 하는지 알아내려는 모든 사람에게 도움이 될 것입니다. 스크립트에서 짧은 변수 이름을 사용하면 암호 코드가 발생할 수 있으므로 이점이 없습니다. 또한 이러한 변수가 다른 곳에 설정되어 있다는 사실이 불편합니다. 이는 스크립트에서 알려지지 않고 문서화되지 않은 것에 의존한다는 의미이기 때문입니다.

관련 정보