O trabalho cron do Ubuntu Server não funciona

1

Meu script que deve ser executado somente quando o servidor está ligado não está funcionando corretamente quando executado pelo cron. Se eu executar manualmente, funciona.

backup() {
  if pidof java &> /dev/null; then

     screen -p 0 -S minecraft -X eval "stuff \"say server backing up\"5"
     # We need to first put the server in readonly mode to reduce the chance of backing up half of a chunk.
     screen -p 0 -S minecraft -X eval "stuff \"save-off\"5"
     screen -p 0 -S minecraft -X eval "stuff \"save-all\"5"

     sleep 10


     cd ~/Minecraft
     mkdir backup
     tar cvfpz backup/Y-$(date +%Y_M-%m_D-%d_T-%H_%M)-world.backup.tar.gz world/

     screen -p 0 -S minecraft -X eval "stuff \"save-on\"5"
     screen -p 0 -S minecraft -X eval "stuff \"say server done backing up\"5"

     # Delete old backups
     echo deleting old backups
     find . -name '*-world.backup*' -mtime +5 -delete

   else
      echo Minecraft Server not on
   fi
 }

Eu estou querendo saber se alguém sabe por que não está parando o backup se o servidor está parado?

    
por popcorn9499 23.02.2014 / 00:55

1 resposta

1

Como é a aparência do arquivo crontab para começar esse script? E quais são as permissões / dono do script?

Em este link eu encontrei:

  1. Quando a tarefa cron é executada a partir do crontab de usuários, ela é executada como esse usuário. No entanto, ele não fornece arquivos no diretório inicial do usuário, como seus arquivos .cshrc ou .bashrc ou qualquer outro arquivo. Se você precisa do cron para a origem (leitura) de qualquer arquivo que seu script precisará, você deve fazê-lo a partir do script que o cron está chamando. Definir caminhos, pesquisar arquivos, definir variáveis de ambiente, etc.
  2. Se a conta de usuário tiver um crontab, mas nenhum shell utilizável em / etc / passwd, o cronjob não será executado. Você terá que dar à conta um shell para executar o crontab.
  3. Se seus cronjobs não estiverem em execução, verifique se o deamon do cron está em execução. Então lembre-se de verificar os arquivos /etc/cron.allow e /etc/cron.deny. Se eles existirem, o usuário que você deseja poder executar trabalhos deve estar em /etc/cron.allow. Você também pode querer verificar se o arquivo /etc/security/access.conf existe. Pode ser necessário adicionar seu usuário lá.
  4. O Crontab não é analisado para substituições ambientais. Você não pode usar coisas como $ PATH, $ HOME ou ~ / sbin. Você pode definir coisas como MAILTO = ou PATH = e outras variáveis de ambiente que o shell / bin / sh usa.

Então, eu começaria editando o próprio cronjob e alterando o ~ para / home / popcorn9499. Então faça o mesmo para o script. Também no script, adicione #! /bin/bash como a primeira linha.

Se tudo no script for apenas a função backup() { , retire essa linha e a% final } e torne-a um script simples. Você pode então perder o argumento backup e o cronjob se torna: */30 * * * * /home/popcorn9499/Scripts/minecraft.sh (você realmente precisa fazer um backup a cada 30 minutos?)

Em seguida, verifique se você tem permissão de rwx para o scriptfile: chmod u+rwx ~/Scripts/minecraft.sh

Por fim, considere renomear seu diretório ~/Scripts to ~/bin , como já está em seu $ PATH.

Isso deve consertar as coisas.

    
por Mausy5043 23.02.2014 / 16:16