Linux 스크립트/종료 정보

Linux 스크립트/종료 정보

다음은 스크립트로 실행하면 작동하지 않으며 종료되지도 않습니다.

#!/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

답변1

이 스크립트의 첫 번째 줄은 사용자 ID로 새 셸을 시작하고 첫 번째 명령을 실행하여 경로를 수정하기 test전에 셸이 종료될 때까지 기다립니다 . export스크립트는 지시한 대로 정확하게 수행됩니다.

답변2

후속 조치로존의 대답, 다음과 같이 줄을 변경할 수 있습니다 sudo.

if [ "$(id -un)" != "test" ]; then
    exec sudo -u test "$0" "$@"
    exit
fi

test이미 실행된 테스트가 아닌 경우 사용자와 함께 스크립트를 다시 실행하는 효과가 있습니다.

관련 정보