Uso básico de / etc / cron / (d): padrão correto para / etc / cron (diário / semanal / mensal)

1

Eu uso o Ubuntu 16.04 com o Bash e criei este arquivo sem extensão e sem compilação /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"

A razão pela qual eu faço isso é para ser menos dependente de crontab .

Gostaria de perguntar se a nomenclatura do arquivo é segura e se a sintaxe geral e as expansões de variáveis estão corretas.

As variáveis drt e rse já foram exportadas depois que seu arquivo foi originado e pode ser usado.

    
por user9303970 13.02.2018 / 07:02

1 resposta

2

Olhando para os outros scripts no mesmo local em uma máquina Ubuntu a que tenho acesso, é claro que esses scripts devem ser scripts de shell apropriados. Eles devem ser executáveis e ter uma #! -line apontando para o interpretador correto.

Como você espera que a variável drt esteja definida como algo, você deve verificar se ela está definida e configurada como algo razoável. Por exemplo, se $drt for o nome do caminho de um diretório existente:

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

Da mesma forma para rse :

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

Isso seria feito no início do script.

Dir checking

pushd e popd são principalmente destinados ao uso interativo (isso pode ser discutido). Além disso, é difícil ler e manter um script que altere os diretórios para frente e para trás. Talvez não neste roteiro, mas em geral.

Em vez de alterar o diretório de trabalho, fazer algo e depois voltar, você pode usar

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

O cd acima está afetando apenas a subcamada ( ... ) .

Neste script, pode ser o suficiente com

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

assumindo que $drt é um caminho absoluto e que o comando simples $rse é capaz de ser executado corretamente, independentemente de onde foi iniciado (isso deixa o script em um diretório de trabalho modificado após a if -statement) . Veja os outros scripts em /etc/cron.daily/ para obter uma visão de como eles funcionam (a sugestão acima é como o script /etc/cron.daily/dpkg faz isso, mas ele não tem mais comandos após sua if -statement).

O script se beneficiaria de recuar corretamente o corpo do for -loop e if -statement.

Com o código de exemplo original, pode ser feito assim:

#!/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"

O recuo pode ser feito com espaços ou tabulações (é uma questão de gosto).

Além disso, eu digitei incorretamente os nomes das variáveis várias vezes enquanto escrevia isso. Ter nomes de variáveis descritivas é benéfico para ambos (em algumas semanas) e para qualquer outra pessoa que esteja tentando descobrir o que seu script deveria estar fazendo. Não há benefício em usar nomes de variáveis curtas em scripts, pois isso leva a códigos obscuros. Além disso, estou desconfortável com o fato de que essas variáveis são definidas em outro lugar, pois implica uma dependência de algo que não é conhecido e não está documentado no script.

    
por 13.02.2018 / 08:00