Mostrando uma mensagem com o Crontab

1

Estamos procurando uma solução que, todos os dias da semana, o computador faça um desligamento às 20h.

O PC tem várias contas de usuário, mas somente uma pessoa o usará. Haverá várias contas por causa dos diferentes trabalhos dentro da empresa.

A pessoa 1 usa a conta A, mas a pessoa 2, que tem seu próprio computador, mas com a mesma imagem, faz logon em outra conta porque ela tem uma função diferente. A pessoa 1 só tem o login na conta e a pessoa 2 também apenas na conta dela. Então 1 pc, várias contas, mas ainda um usuário de cada vez.

Usar o Crontab (na conta de administrador) foi a melhor maneira de permitir que isso funcione para todos os usuários.
Agora também queremos que às 21h50 uma mensagem (como alerta ou notificação de envio ou zenidade) apareça para avisar o usuário do desligamento. (OMS NÃO PODERÁ PREVENIR).

Eu sei que não é possível pedir ao Crontab por * * * * * /path/to/notify-send "Pc will shut down".
Tentamos um .sh com o seguinte código:

   #!/bin/sh
   DISPLAY=:0.0
   /usr/bin/notify-send 'shutdown warning'

(O aviso de desligamento não é o que queremos, mas apenas para o teste '.

Testamos isso .sh no terminal e sem erros. Funciona perfeitamente. Quando o adicionamos ao Crontab, assim:

  sudo contrab -e

  * * * * * /home/administrator/sluiten.sh 

(e sim, isso é 100% de certeza que o diretório correto) não funciona.

Então, alguém pode me dizer qual deve ser o meu arquivo .sh e como adicioná-lo ao crontab para que funcione?

    
por RUS 28.11.2016 / 12:36

2 respostas

1

Um script de exemplo para colocar todos os usuários conectados e enviar um aviso para eles. Após a primeira vez que o script é executado, o log deve ser verificado para ver se o campo de corte precisa de ajuste, devido a possíveis diferenças na saída de who . Nos usos subseqüentes, as linhas de eco de registro podem ser comentadas. O loop while é um exagero para um sistema de usuário único, mas pode ser útil.

#!/bin/bash
###
USERLIST=($(who | sed -e 's/[)(]//g' -e 's/  */ /g' | cut -d ' ' -f1,5 | sort -u | tr -d '\n'))
LOG=/tmp/"$(basename $0)".log
###
echo "$(who | sed -e 's/[)(]//g' -e 's/  */ /g')" >> $LOG
echo "${USERLIST[@]}" >> $LOG
C=0
while [ $C -lt ${#USERLIST[@]} ]
    do
        D=$((C + 1))
        export DISPLAY="${USERLIST[$D]}"
        export XAUTHORITY="/home/${USERLIST[$C]}/.Xauthority"
        export XDG_RUNTIME_DIR=/run/user/$(id -u ${USERLIST[$C]})
        /usr/bin/notify-send 'shutdown warning'
        C=$((C + 2))
    done
    
por J. Starnes 07.11.2017 / 08:06
-2

Primeiro, root crontabs não são como os crontabs do usuário e NÃO são editados com sudo crontab -e . Leia o arquivo /etc/crontab original. root cronjobs são armazenados em /etc/cron.d , /etc/cron.daily , /etc/cron.hourly /etc/cron.monthly e /etc/cron.weekly . Eles são controlados com um /etc/crontab formatado de forma diferente (ele tem um campo userid ), não o arquivo /var/spool/cron/crontabs/root criado por sudo crontab -e .

Para responder à sua pergunta, consulte man shutdown :

xenial (8) shutdown.8.gz
Provided by: upstart-sysv_1.13.2-0ubuntu21_i386 

NAME
       shutdown - bring the system down

SYNOPSIS
       shutdown [OPTION]...  TIME [MESSAGE]

DESCRIPTION
       shutdown arranges for the system to be brought down in a safe way.  All
       logged-in users are notified that the system is going down and,  within
       the last five minutes of TIME, new logins are prevented.
    
por waltinator 28.11.2016 / 15:42