A primeira linha deste script lança um novo shell sob o ID de usuário test
e espera que esse shell saia antes de executar o primeiro comando export
para modificar o caminho. O script está fazendo exatamente o que você disse para fazer.
O abaixo não está funcionando quando eu o executo como um script e nem sequer faço uma saída: Por favor, informe.
#!/bin/bash
sudo su - test
export PATH=$PATH:/opt/postgres/9.5/bin
export LD_LIBRARY_PATH=/opt/postgres/9.5/lib
BACKUP_RETENTION=$((7*24*60)) # 1 week
LOG_RETENTION=$((7*24*60)) # 1 week
BACKUP_DIR=/backup/data/pg_backup/
BACKUP_NAME=$BACKUP_DIR"test-db-'date +%Y-%m-%d-%H:%M'.zip"
KEY_AUTH='cat /var/lib/test/.test_file'
LOG_DIR=/backup/log/
LOG_FILE=$LOG_DIR"test-db-'date +%Y-%m-%d-%H:%M'.log"
echo "Backup :: Script Start -- $(date +%Y-%m-%d_%H:%M)" >> $LOG_FILE
START_TIME=$(date +%s)
dump_name=$BACKUP_DIR$test_'date +%Y%m%d'.dump
pg_dump -c -p 11381 test -f "$dump_name" &&
zip --encrypt -P ${KEY_AUTH} ${BACKUP_NAME} "$dump_name" &&
rm "$dump_name"
# *** Deleting Backup Based on Retention *** #
find $BACKUP_DIR -name "*.zip" -mmin +${BACKUP_RETENTION} -delete
# *** Deleting Logs Based on Retention *** #
find $LOG_DIR -name "*.zip" -mmin +${LOG_RETENTION} -delete
END_TIME=$(date +%s)
ELAPSED_TIME=$(expr $END_TIME - $START_TIME)
echo "Backup :: Script End -- $(date +%Y-%m-%d_%H:%M)" >> $LOG_FILE
echo "Elapsed Time :: $(date -d 00:00:$ELAPSED_TIME +%Hh:%Mm:%Ss) " >> $LOG_FILE
exit 0
A primeira linha deste script lança um novo shell sob o ID de usuário test
e espera que esse shell saia antes de executar o primeiro comando export
para modificar o caminho. O script está fazendo exatamente o que você disse para fazer.
Na sequência da resposta de João , pode alterar a sua linha sudo
para esta:
if [ "$(id -un)" != "test" ]; then
exec sudo -u test "$0" "$@"
exit
fi
O que isto faz é re-executar o script com o usuário test
se este não for o teste que já o executa.
Tags linux