Files
Trackeep/scripts/setup-systemd-update.sh
T
Tomas Dvorak a9395be39f chore: Add automated release workflow and version management
- 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
2026-02-27 19:03:41 +01:00

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 "$@"