Agendamento - um caminho certo?

1

Estou acompanhando vídeos do youtube e cursos on-line, aprendendo sobre o comando do Linux, aprimorando habilidades, tentando melhorar. Atualmente tentando entender o agendamento.

Meu Raspberry Pi está rodando o owncloud em Raspbian headless. Eu quero programá-lo para colocar o owncloud no modo de manutenção, apt-get update e depois apt-get upgrade, então tire o owncloud do modo de manutenção, uma vez por semana. Os comandos Owncloud (php) devem ser emitidos pelo usuário www-data, enquanto o apt-get deve ser executado como root. Até agora, eu tentei isso:

sudo -u www-data crontab -e

Adicionando a linha 0 7 * * 1 php /var/www/owncloud/occ maintenance:mode --on

então

sudo crontab -e

adicionando a linha 1 7 * * 1 apt-get update && apt-get upgrade -y

Mas aqui eu fico preso. Como eu digo ao sistema para tirar o OwnCloud do modo de manutenção depois que o apt-get upgrade -y retorna o status de saída 0? Eu pensei em fazer a entrada no crontab do root como

1 7 * * 1 apt-get update && apt-get upgrade && php /var/www/owncloud/occ maintenance:mode --off

mas manutenção: o modo --off falha, pois não é executado pelo usuário www-data. Eu poderia agendar o último comando para rodar minutos depois como www-data, mas eu prefiro que ele seja executado quando o apt-get upgrade -y der o status de saída 0. Existe uma maneira de fazer isso?

    
por David1618 03.07.2017 / 19:03

2 respostas

1

su e amigos para o resgate! su , sudo e super podem todos ser usados aqui. su é tradicional, sudo é o mais fácil e super tem vantagens se você quiser que os usuários possam fazer partes disso.

Como você mencionou especificamente o teste do status de saída de apt-get upgrade , você usaria 1 7 * * 1 apt-get update && apt-get upgrade && sudo -u www-data php /var/www/owncloud/occ maintenance:mode --off .

Agora isso está ficando um pouco longo, então seguir o conselho do thrig e colocá-lo em um script tem vantagens, mas o exemplo dele tem dois defeitos: ele não verifica valores de retorno e o modo de manutenção no comando é seguido diretamente pelo próximo comando e eu suponho que houve uma razão para o atraso entre entrar no modo de manutenção e iniciar o apt-get, então você pode querer algo mais parecido com isto:

#!/bin/sh
set -e
sudo -u www-data php /var/www/owncloud/occ maintenance:mode --on || sudo -u www-data php /var/www/owncloud/occ maintenance:mode --on
sleep 1m || true
apt-get update || apt-get update
apt-get upgrade -y || apt-get install
sudo -u www-data php /var/www/owncloud/occ maintenance:mode --off || sudo -u www-data php /var/www/owncloud/occ maintenance:mode --off

Mas você tem um bom começo.

    
por 03.07.2017 / 19:27
0

Você provavelmente deseja um único script que execute todas as etapas necessárias em sequência:

#!/bin/sh
sudo -u www-data php /var/www/owncloud/occ maintenance:mode --on
apt-get update && apt-get upgrade -y
sudo -u www-data php /var/www/owncloud/occ maintenance:mode --off

E, em seguida, execute isso a partir do crontab da raiz.

    
por 03.07.2017 / 19:15

Tags