mirror of
https://github.com/Dvorinka/Trackeep.git
synced 2026-06-03 20:12:58 +00:00
a9395be39f
- Add GitHub Actions workflow for automated releases
- Add semantic versioning support
- Update docker-compose files with version variables
- Add release script for manual versioning
- Add comprehensive version workflow documentation
🚀 Ready for v1.2.5 release
222 lines
5.5 KiB
Bash
Executable File
222 lines
5.5 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Trackeep Auto-Update Service
|
|
# Alternative to cron - runs as a systemd service for more reliable scheduling
|
|
|
|
set -e
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Configuration
|
|
TRACKEEP_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
AUTO_UPDATE_SCRIPT="$TRACKEEP_DIR/scripts/auto-update.sh"
|
|
SERVICE_NAME="trackeep-auto-update"
|
|
SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}.service"
|
|
TIMER_FILE="/etc/systemd/system/${SERVICE_NAME}.timer"
|
|
|
|
print_status() {
|
|
echo -e "${BLUE}🔧 $1${NC}"
|
|
}
|
|
|
|
print_success() {
|
|
echo -e "${GREEN}✅ $1${NC}"
|
|
}
|
|
|
|
print_warning() {
|
|
echo -e "${YELLOW}⚠️ $1${NC}"
|
|
}
|
|
|
|
print_error() {
|
|
echo -e "${RED}❌ $1${NC}"
|
|
}
|
|
|
|
# Check if running as root
|
|
check_root() {
|
|
if [ "$EUID" -ne 0 ]; then
|
|
print_error "This script requires root privileges to install systemd services"
|
|
print_status "Please run with: sudo $0"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Check if auto-update script exists
|
|
check_script() {
|
|
if [ ! -f "$AUTO_UPDATE_SCRIPT" ]; then
|
|
print_error "Auto-update script not found at: $AUTO_UPDATE_SCRIPT"
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -x "$AUTO_UPDATE_SCRIPT" ]; then
|
|
chmod +x "$AUTO_UPDATE_SCRIPT"
|
|
fi
|
|
}
|
|
|
|
# Create systemd service file
|
|
create_service() {
|
|
print_status "Creating systemd service..."
|
|
|
|
cat > "$SERVICE_FILE" << EOF
|
|
[Unit]
|
|
Description=Trackeep Auto-Update Service
|
|
After=docker.service
|
|
Requires=docker.service
|
|
|
|
[Service]
|
|
Type=oneshot
|
|
ExecStart=$AUTO_UPDATE_SCRIPT
|
|
WorkingDirectory=$TRACKEEP_DIR
|
|
User=root
|
|
Group=root
|
|
StandardOutput=append:/var/log/trackeep-auto-update.log
|
|
StandardError=append:/var/log/trackeep-auto-update.log
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOF
|
|
|
|
print_success "Service file created: $SERVICE_FILE"
|
|
}
|
|
|
|
# Create systemd timer file
|
|
create_timer() {
|
|
print_status "Creating systemd timer..."
|
|
|
|
cat > "$TIMER_FILE" << EOF
|
|
[Unit]
|
|
Description=Run Trackeep Auto-Update Daily
|
|
Requires=${SERVICE_NAME}.service
|
|
|
|
[Timer]
|
|
OnCalendar=daily
|
|
Persistent=true
|
|
RandomizedDelaySec=3600 # Random delay up to 1 hour
|
|
|
|
[Install]
|
|
WantedBy=timers.target
|
|
EOF
|
|
|
|
print_success "Timer file created: $TIMER_FILE"
|
|
}
|
|
|
|
# Install and enable service
|
|
install_service() {
|
|
print_status "Installing systemd service and timer..."
|
|
|
|
# Reload systemd daemon
|
|
systemctl daemon-reload
|
|
|
|
# Enable and start the timer
|
|
systemctl enable "$SERVICE_NAME.timer"
|
|
systemctl start "$SERVICE_NAME.timer"
|
|
|
|
print_success "Service and timer installed successfully!"
|
|
}
|
|
|
|
# Show status
|
|
show_status() {
|
|
print_status "Service status:"
|
|
systemctl status "$SERVICE_NAME.timer" --no-pager
|
|
|
|
echo ""
|
|
print_status "Next run time:"
|
|
systemctl list-timers "$SERVICE_NAME.timer" --no-pager
|
|
|
|
echo ""
|
|
print_status "Recent logs:"
|
|
journalctl -u "$SERVICE_NAME.service" --no-pager -n 10 || tail -10 /var/log/trackeep-auto-update.log 2>/dev/null || print_warning "No logs found"
|
|
}
|
|
|
|
# Test service
|
|
test_service() {
|
|
print_status "Testing auto-update service..."
|
|
|
|
# Run the service manually
|
|
systemctl start "$SERVICE_NAME.service"
|
|
|
|
# Show results
|
|
echo ""
|
|
print_status "Service execution results:"
|
|
journalctl -u "$SERVICE_NAME.service" --no-pager -n 20 || tail -20 /var/log/trackeep-auto-update.log 2>/dev/null
|
|
}
|
|
|
|
# Remove service
|
|
remove_service() {
|
|
print_status "Removing auto-update service..."
|
|
|
|
# Stop and disable timer
|
|
systemctl stop "$SERVICE_NAME.timer" 2>/dev/null || true
|
|
systemctl disable "$SERVICE_NAME.timer" 2>/dev/null || true
|
|
|
|
# Remove service and timer files
|
|
rm -f "$SERVICE_FILE" "$TIMER_FILE"
|
|
|
|
# Reload systemd daemon
|
|
systemctl daemon-reload
|
|
|
|
print_success "Auto-update service removed"
|
|
}
|
|
|
|
# Main function
|
|
main() {
|
|
echo ""
|
|
print_status "Trackeep Auto-Update Service Setup"
|
|
print_status "=================================="
|
|
echo ""
|
|
|
|
case "${1:-install}" in
|
|
"install")
|
|
check_root
|
|
check_script
|
|
create_service
|
|
create_timer
|
|
install_service
|
|
show_status
|
|
print_success "SystemD auto-update service installed!"
|
|
echo ""
|
|
print_status "The service will run daily at a randomized time"
|
|
print_status "To view logs: journalctl -u $SERVICE_NAME.service -f"
|
|
print_status "To run manually: systemctl start $SERVICE_NAME.service"
|
|
print_status "To remove: sudo $0 remove"
|
|
;;
|
|
"remove")
|
|
check_root
|
|
remove_service
|
|
;;
|
|
"status")
|
|
show_status
|
|
;;
|
|
"test")
|
|
check_root
|
|
test_service
|
|
;;
|
|
"enable")
|
|
check_root
|
|
systemctl enable "$SERVICE_NAME.timer"
|
|
print_success "Timer enabled"
|
|
;;
|
|
"disable")
|
|
check_root
|
|
systemctl disable "$SERVICE_NAME.timer"
|
|
print_success "Timer disabled"
|
|
;;
|
|
*)
|
|
echo "Usage: $0 [install|remove|status|test|enable|disable]"
|
|
echo " install - Install systemd service for daily auto-update (default)"
|
|
echo " remove - Remove systemd service"
|
|
echo " status - Show service status and next run time"
|
|
echo " test - Run auto-update service manually"
|
|
echo " enable - Enable the timer"
|
|
echo " disable - Disable the timer"
|
|
exit 1
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Run main function
|
|
main "$@"
|