Este script funciona quando executado comdoas ./backup_cron_root.sh
#!/usr/bin/bash
/usr/bin/crontab -l> "/tmp/cron.$(whoami).$(hostname)" && /bin/date>>"/tmp/cron.$(whoami).$(hostname)" &&
/usr/bin/doas -u joanna /usr/bin/cp -f "/tmp/cron.$(whoami).$(hostname)" "/home/joanna/pCloudDrive/backups" &&
/usr/bin/rm "/tmp/cron.$(whoami).$(hostname)"
onde ./backup_cron_root.sh
é o nome do script. Quando o mesmo script é agendado como um cronjob
doas crontab -e
e * * * * * /home/joanna/backup_cron_root.sh >/tmp/cronjob.log 2>&1
cria /tmp/cron.root.joanna-ONE-AMD-M4
o que pertence a root
, mas por algum motivo não consegue copiá-lo para /home/joanna/pCloudDrive/backups
. Por quê então? Por que esse script não é bem-sucedido no crontab como ocorre quando executado manualmente?
O conteúdo do meu /etc/doas.conf
é
permit joanna as root
permit root as joanna
O seguinte é a minha cauda de grep CRON /var/log/syslog
:
Feb 26 17:17:01 joanna-ONE-AMD-M4 CRON[747796]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Feb 26 17:17:01 joanna-ONE-AMD-M4 CRON[747797]: (root) CMD (/home/joanna/backup_cron_root.sh)
Feb 26 17:17:01 joanna-ONE-AMD-M4 CRON[747792]: (CRON) info (No MTA installed, discarding output)
Feb 26 17:17:01 joanna-ONE-AMD-M4 CRON[747791]: (CRON) info (No MTA installed, discarding output)
Feb 26 17:17:01 joanna-ONE-AMD-M4 CRON[747794]: (CRON) info (No MTA installed, discarding output)
Feb 26 17:17:01 joanna-ONE-AMD-M4 CRON[747793]: (CRON) info (No MTA installed, discarding output)
Feb 26 17:17:22 joanna-ONE-AMD-M4 CRON[747795]: (CRON) info (No MTA installed, discarding output)
Feb 26 17:18:01 joanna-ONE-AMD-M4 CRON[751555]: (root) CMD (/home/joanna/backup_cron_root.sh)
Feb 26 17:18:01 joanna-ONE-AMD-M4 CRON[751551]: (CRON) info (No MTA installed, discarding output)
Feb 26 17:18:01 joanna-ONE-AMD-M4 CRON[751550]: (CRON) info (No MTA installed, discarding output)
Feb 26 17:18:01 joanna-ONE-AMD-M4 CRON[751553]: (CRON) info (No MTA installed, discarding output)
Feb 26 17:18:01 joanna-ONE-AMD-M4 CRON[751552]: (CRON) info (No MTA installed, discarding output)
Feb 26 17:18:22 joanna-ONE-AMD-M4 CRON[751554]: (CRON) info (No MTA installed, discarding output)
O conteúdo de /tmp/cronjob.log
é
doas: Authentication failed
O problema parece ser que você não permite que o usuário root mude para o
joanna
usuário sem uma senha em suadoas
configuração.Você faz isso com a
nopass
opção nodoas.conf
arquivo:(Faz pouco sentido impedir que o usuário root use
doas
para mudar para outros usuários, então removi oas joanna
bit.)Você também tem a opção de usar
su
no lugar dedoas
:Como alternativa, copie o arquivo como root e altere a propriedade dele
chown
posteriormente.Seu script também pode ser um pouco simplificado:
Excluí o uso excessivo de nomes de caminho absolutos. Se
/usr/bin
e/bin
não estiver$PATH
quando este script for executado a partir do cron, então algo está quebrado em sua configuração.Também atribuí o nome do arquivo de saída a uma variável, o que significa que não precisamos executar
whoami
ehostname
sempre que precisamos nos referir a ela.Eu removi a execução condicional de cada comando, optando por deixar o script continuar limpando o diretório temporário.