Skip to content

Commit 284d3d6

Browse files
committed
log rotate update
1 parent e08ee2a commit 284d3d6

File tree

2 files changed

+61
-3
lines changed

2 files changed

+61
-3
lines changed

nginx-f1/example/logrotate.env

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,11 @@ LOGROTATE_ARCHIVE_DIR=/var/log/nginx/archive
2727

2828
# Remote transfer configuration
2929
LOGROTATE_ENABLE_REMOTE=false
30-
LOGROTATE_REMOTE_METHOD=scp # scp, rsync, s3
30+
LOGROTATE_REMOTE_METHOD=scp # scp, sftp, rsync, s3
3131

32-
# SCP/RSYNC configuration
32+
# SCP/SFTP/RSYNC configuration
33+
# Use "sftp" method for SFTP-only servers (Hetzner Storage Box, etc.)
34+
# Uses sftp batch mode — no shell access required
3335
LOGROTATE_REMOTE_HOST=your-remote-server.com
3436
LOGROTATE_REMOTE_USER=nginx-logs
3537
LOGROTATE_REMOTE_PATH=/var/log/nginx-archive

nginx-f1/logrotate-manager.sh

Lines changed: 57 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ ARCHIVE_DIR=${LOGROTATE_ARCHIVE_DIR:-/var/log/nginx/archive}
99
REMOTE_HOST=${LOGROTATE_REMOTE_HOST:-}
1010
REMOTE_USER=${LOGROTATE_REMOTE_USER:-}
1111
REMOTE_PATH=${LOGROTATE_REMOTE_PATH:-/var/log/nginx-archive}
12-
REMOTE_METHOD=${LOGROTATE_REMOTE_METHOD:-scp} # scp, rsync, s3, etc.
12+
REMOTE_METHOD=${LOGROTATE_REMOTE_METHOD:-scp} # scp, sftp, rsync, s3
1313
COMPRESS_ARCHIVE=${LOGROTATE_COMPRESS_ARCHIVE:-true}
1414
CLEANUP_AFTER_REMOTE=${LOGROTATE_CLEANUP_AFTER_REMOTE:-false}
1515
ENABLE_ARCHIVE=${LOGROTATE_ENABLE_ARCHIVE:-true}
@@ -108,6 +108,9 @@ transfer_to_remote() {
108108
"scp")
109109
transfer_via_scp
110110
;;
111+
"sftp")
112+
transfer_via_sftp
113+
;;
111114
"rsync")
112115
transfer_via_rsync
113116
;;
@@ -149,6 +152,59 @@ transfer_via_scp() {
149152
fi
150153
}
151154

155+
# Function to transfer via SFTP (batch mode — works with SFTP-only servers)
156+
transfer_via_sftp() {
157+
if [ -z "$REMOTE_HOST" ] || [ -z "$REMOTE_USER" ]; then
158+
log_message "SFTP transfer requires REMOTE_HOST and REMOTE_USER"
159+
return 1
160+
fi
161+
162+
local sftp_opts="-P $SSH_PORT -i $SSH_KEY_PATH -o StrictHostKeyChecking=no -o BatchMode=yes"
163+
local batch_file=$(mktemp /tmp/sftp-batch-XXXXXX)
164+
165+
# Create remote directories (dash prefix = ignore errors if already exists)
166+
local parent_dir=$(dirname "$REMOTE_PATH")
167+
if [ "$parent_dir" != "/" ] && [ "$parent_dir" != "." ]; then
168+
echo "-mkdir $parent_dir" >> "$batch_file"
169+
fi
170+
echo "-mkdir $REMOTE_PATH" >> "$batch_file"
171+
172+
# Add files to upload
173+
local file_count=0
174+
if [ "$COMPRESS_ARCHIVE" = "true" ]; then
175+
for f in "$ARCHIVE_DIR"/nginx-logs-*.tar.gz; do
176+
if [ -f "$f" ]; then
177+
echo "put $f $REMOTE_PATH/" >> "$batch_file"
178+
file_count=$((file_count + 1))
179+
fi
180+
done
181+
else
182+
for f in "$ARCHIVE_DIR"/*; do
183+
if [ -f "$f" ]; then
184+
echo "put $f $REMOTE_PATH/" >> "$batch_file"
185+
file_count=$((file_count + 1))
186+
fi
187+
done
188+
fi
189+
190+
if [ "$file_count" -eq 0 ]; then
191+
log_message "No files to transfer via SFTP"
192+
rm -f "$batch_file"
193+
return 0
194+
fi
195+
196+
# Execute sftp batch
197+
if sftp $sftp_opts -b "$batch_file" "$REMOTE_USER@$REMOTE_HOST" >> "$LOG_FILE" 2>&1; then
198+
log_message "Transferred $file_count files to remote via SFTP"
199+
else
200+
log_message "SFTP transfer failed (exit code $?)"
201+
rm -f "$batch_file"
202+
return 1
203+
fi
204+
205+
rm -f "$batch_file"
206+
}
207+
152208
# Function to transfer via rsync
153209
transfer_via_rsync() {
154210
if [ -z "$REMOTE_HOST" ] || [ -z "$REMOTE_USER" ]; then

0 commit comments

Comments
 (0)