146 lines
3.5 KiB
Bash
146 lines
3.5 KiB
Bash
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
# Service reliability script for AW services
|
|
# Fixes common issues and ensures proper configuration
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
ENV_FILE="/etc/activitywatch/aw-server.env"
|
|
|
|
log() {
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"
|
|
}
|
|
|
|
check_env_file() {
|
|
if [[ ! -f "$ENV_FILE" ]]; then
|
|
log "ERROR: Environment file not found: $ENV_FILE"
|
|
return 1
|
|
fi
|
|
log "✓ Environment file exists"
|
|
}
|
|
|
|
fix_permissions() {
|
|
log "Fixing permissions..."
|
|
|
|
# Ensure proper ownership
|
|
chown -R activitywatch:activitywatch /var/lib/activitywatch
|
|
chown -R activitywatch:activitywatch /var/log/activitywatch
|
|
chown -R activitywatch:activitywatch /opt/activitywatch
|
|
|
|
# Ensure proper permissions
|
|
chmod 755 /var/lib/activitywatch
|
|
chmod 755 /var/log/activitywatch
|
|
chmod 755 /opt/activitywatch
|
|
|
|
log "✓ Permissions fixed"
|
|
}
|
|
|
|
restart_services() {
|
|
log "Restarting services..."
|
|
|
|
systemctl daemon-reload
|
|
|
|
# Stop all services
|
|
systemctl stop aw-worktime-api aw-worktime-ui-bridge activitywatch-server || true
|
|
|
|
# Wait for stop
|
|
sleep 2
|
|
|
|
# Start in dependency order
|
|
systemctl start activitywatch-server
|
|
sleep 3
|
|
systemctl start aw-worktime-api
|
|
sleep 2
|
|
systemctl start aw-worktime-ui-bridge
|
|
|
|
log "✓ Services restarted"
|
|
}
|
|
|
|
enable_services() {
|
|
log "Enabling services..."
|
|
|
|
systemctl enable activitywatch-server
|
|
systemctl enable aw-worktime-api
|
|
systemctl enable aw-worktime-ui-bridge
|
|
|
|
log "✓ Services enabled"
|
|
}
|
|
|
|
setup_logrotate() {
|
|
local logrotate_file="/etc/logrotate.d/activitywatch"
|
|
|
|
if [[ ! -f "$logrotate_file" ]]; then
|
|
log "Setting up log rotation..."
|
|
cp "$SCRIPT_DIR/logrotate.conf" "$logrotate_file"
|
|
log "✓ Log rotation configured"
|
|
else
|
|
log "✓ Log rotation already configured"
|
|
fi
|
|
}
|
|
|
|
setup_health_check() {
|
|
local health_script="/usr/local/bin/aw-health-check"
|
|
local health_timer="/etc/systemd/system/aw-health-check.timer"
|
|
local health_service="/etc/systemd/system/aw-health-check.service"
|
|
|
|
if [[ ! -f "$health_script" ]]; then
|
|
log "Setting up health check..."
|
|
cp "$SCRIPT_DIR/health-check.sh" "$health_script"
|
|
chmod +x "$health_script"
|
|
|
|
# Create systemd timer for health checks
|
|
cat > "$health_timer" << 'EOF'
|
|
[Unit]
|
|
Description=AW Health Check Timer
|
|
Requires=aw-health-check.service
|
|
|
|
[Timer]
|
|
OnCalendar=*:0/5:00
|
|
Persistent=true
|
|
|
|
[Install]
|
|
WantedBy=timers.target
|
|
EOF
|
|
|
|
cat > "$health_service" << 'EOF'
|
|
[Unit]
|
|
Description=AW Health Check
|
|
After=network.target
|
|
|
|
[Service]
|
|
Type=oneshot
|
|
ExecStart=/usr/local/bin/aw-health-check
|
|
User=root
|
|
Group=root
|
|
EOF
|
|
|
|
systemctl daemon-reload
|
|
systemctl enable aw-health-check.timer
|
|
systemctl start aw-health-check.timer
|
|
|
|
log "✓ Health check configured"
|
|
else
|
|
log "✓ Health check already configured"
|
|
fi
|
|
}
|
|
|
|
main() {
|
|
log "=== AW Service Reliability Fix ==="
|
|
|
|
check_env_file || exit 1
|
|
fix_permissions
|
|
setup_logrotate
|
|
setup_health_check
|
|
restart_services
|
|
enable_services
|
|
|
|
log
|
|
log "=== Reliability Fix Complete ==="
|
|
log "Check status with: systemctl status activitywatch-server aw-worktime-api aw-worktime-ui-bridge"
|
|
log "Check health with: /usr/local/bin/aw-health-check"
|
|
log "View logs with: journalctl -u activitywatch-server -u aw-worktime-api -u aw-worktime-ui-bridge -f"
|
|
}
|
|
|
|
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
|
main "$@"
|
|
fi |