mirror of
https://github.com/kuhyx/scripts.git
synced 2026-07-04 13:03:05 +02:00
wip: not working shutdown script
This commit is contained in:
parent
a773ded5fc
commit
3250c720bc
286
scripts/setup_midnight_shutdown.sh
Executable file
286
scripts/setup_midnight_shutdown.sh
Executable file
@ -0,0 +1,286 @@
|
||||
#!/bin/bash
|
||||
# Script to set up automatic PC shutdown at midnight on Arch Linux
|
||||
# Creates systemd timer and service for daily shutdown at 00:00
|
||||
# Handles sudo privileges automatically
|
||||
|
||||
set -e # Exit on any error
|
||||
|
||||
echo "Midnight Auto-Shutdown Setup for Arch Linux"
|
||||
echo "==========================================="
|
||||
echo "Current Date: $(date)"
|
||||
echo "User: ${SUDO_USER:-$USER}"
|
||||
|
||||
# Function to check and request sudo privileges
|
||||
check_sudo() {
|
||||
if [[ $EUID -ne 0 ]]; then
|
||||
echo "This script requires sudo privileges to create systemd services."
|
||||
echo "Requesting sudo access..."
|
||||
exec sudo "$0" "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
# Get the actual user (even when running with sudo)
|
||||
if [[ -n "$SUDO_USER" ]]; then
|
||||
ACTUAL_USER="$SUDO_USER"
|
||||
USER_HOME="/home/$SUDO_USER"
|
||||
else
|
||||
ACTUAL_USER="$USER"
|
||||
USER_HOME="$HOME"
|
||||
fi
|
||||
|
||||
echo "Target user: $ACTUAL_USER"
|
||||
echo "User home: $USER_HOME"
|
||||
|
||||
# Function to create the shutdown service
|
||||
create_shutdown_service() {
|
||||
echo ""
|
||||
echo "1. Creating Systemd Shutdown Service..."
|
||||
echo "======================================"
|
||||
|
||||
local service_file="/etc/systemd/system/midnight-shutdown.service"
|
||||
|
||||
cat > "$service_file" << 'EOF'
|
||||
[Unit]
|
||||
Description=Automatic PC shutdown at midnight
|
||||
DefaultDependencies=false
|
||||
Before=shutdown.target reboot.target halt.target
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=/usr/bin/systemctl poweroff
|
||||
TimeoutStartSec=0
|
||||
StandardOutput=journal
|
||||
StandardError=journal
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
echo "✓ Created systemd service: $service_file"
|
||||
}
|
||||
|
||||
# Function to create the shutdown timer
|
||||
create_shutdown_timer() {
|
||||
echo ""
|
||||
echo "2. Creating Systemd Shutdown Timer..."
|
||||
echo "==================================="
|
||||
|
||||
local timer_file="/etc/systemd/system/midnight-shutdown.timer"
|
||||
|
||||
cat > "$timer_file" << 'EOF'
|
||||
[Unit]
|
||||
Description=Timer for automatic PC shutdown at midnight
|
||||
Requires=midnight-shutdown.service
|
||||
|
||||
[Timer]
|
||||
OnCalendar=*-*-* 00:00:00
|
||||
Persistent=false
|
||||
AccuracySec=1s
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
||||
EOF
|
||||
|
||||
echo "✓ Created systemd timer: $timer_file"
|
||||
}
|
||||
|
||||
# Function to create management script
|
||||
create_management_script() {
|
||||
echo ""
|
||||
echo "3. Creating Management Script..."
|
||||
echo "=============================="
|
||||
|
||||
local script_file="/usr/local/bin/midnight-shutdown-manager.sh"
|
||||
|
||||
cat > "$script_file" << 'EOF'
|
||||
#!/bin/bash
|
||||
# Midnight Auto-Shutdown Manager
|
||||
# Provides easy management of the midnight shutdown feature
|
||||
|
||||
TIMER_NAME="midnight-shutdown.timer"
|
||||
SERVICE_NAME="midnight-shutdown.service"
|
||||
|
||||
show_status() {
|
||||
echo "Midnight Auto-Shutdown Status"
|
||||
echo "============================"
|
||||
|
||||
if systemctl is-enabled "$TIMER_NAME" &>/dev/null; then
|
||||
echo "Status: ENABLED"
|
||||
if systemctl is-active "$TIMER_NAME" &>/dev/null; then
|
||||
echo "Timer: ACTIVE"
|
||||
else
|
||||
echo "Timer: INACTIVE"
|
||||
fi
|
||||
else
|
||||
echo "Status: NOT ENABLED"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Next scheduled shutdown:"
|
||||
systemctl list-timers "$TIMER_NAME" --no-pager 2>/dev/null | grep "$TIMER_NAME" || echo "Timer not active"
|
||||
|
||||
echo ""
|
||||
echo "Recent logs:"
|
||||
journalctl -u "$SERVICE_NAME" --no-pager -n 5 2>/dev/null || echo "No recent logs"
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
"status")
|
||||
show_status
|
||||
;;
|
||||
"logs")
|
||||
echo "Midnight Auto-Shutdown Logs"
|
||||
echo "=========================="
|
||||
journalctl -u "$SERVICE_NAME" --no-pager -n 20
|
||||
;;
|
||||
*)
|
||||
echo "Midnight Auto-Shutdown Manager"
|
||||
echo "Usage: $0 {status|logs}"
|
||||
echo ""
|
||||
echo "Commands:"
|
||||
echo " status - Show current status and next shutdown time"
|
||||
echo " logs - Show recent shutdown logs"
|
||||
echo ""
|
||||
show_status
|
||||
;;
|
||||
esac
|
||||
EOF
|
||||
|
||||
chmod +x "$script_file"
|
||||
echo "✓ Created management script: $script_file"
|
||||
}
|
||||
|
||||
# Function to enable the timer
|
||||
enable_timer() {
|
||||
echo ""
|
||||
echo "4. Enabling Shutdown Timer..."
|
||||
echo "============================"
|
||||
|
||||
# Reload systemd daemon
|
||||
systemctl daemon-reload
|
||||
echo "✓ Reloaded systemd daemon"
|
||||
|
||||
# Enable the timer
|
||||
systemctl enable midnight-shutdown.timer
|
||||
echo "✓ Enabled midnight-shutdown timer"
|
||||
|
||||
# Start the timer
|
||||
systemctl start midnight-shutdown.timer
|
||||
echo "✓ Started midnight-shutdown timer"
|
||||
}
|
||||
|
||||
# Function to test the setup
|
||||
test_setup() {
|
||||
echo ""
|
||||
echo "5. Testing Setup..."
|
||||
echo "=================="
|
||||
|
||||
echo "Service files:"
|
||||
if [[ -f "/etc/systemd/system/midnight-shutdown.service" ]]; then
|
||||
echo "✓ Service file exists"
|
||||
else
|
||||
echo "✗ Service file missing"
|
||||
fi
|
||||
|
||||
if [[ -f "/etc/systemd/system/midnight-shutdown.timer" ]]; then
|
||||
echo "✓ Timer file exists"
|
||||
else
|
||||
echo "✗ Timer file missing"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Timer status:"
|
||||
if systemctl is-enabled midnight-shutdown.timer &>/dev/null; then
|
||||
echo "✓ Timer is enabled"
|
||||
else
|
||||
echo "✗ Timer is not enabled"
|
||||
fi
|
||||
|
||||
if systemctl is-active midnight-shutdown.timer &>/dev/null; then
|
||||
echo "✓ Timer is active"
|
||||
else
|
||||
echo "✗ Timer is not active"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Next scheduled shutdown:"
|
||||
systemctl list-timers midnight-shutdown.timer --no-pager 2>/dev/null | grep midnight-shutdown || echo "Timer information not available"
|
||||
}
|
||||
|
||||
# Function to show final instructions
|
||||
show_instructions() {
|
||||
echo ""
|
||||
echo "=========================================="
|
||||
echo "Midnight Auto-Shutdown Setup Complete"
|
||||
echo "=========================================="
|
||||
echo "Summary:"
|
||||
echo "✓ Systemd service created (/etc/systemd/system/midnight-shutdown.service)"
|
||||
echo "✓ Systemd timer created (/etc/systemd/system/midnight-shutdown.timer)"
|
||||
echo "✓ Management script created (/usr/local/bin/midnight-shutdown-manager.sh)"
|
||||
echo "✓ Timer enabled and started"
|
||||
echo ""
|
||||
echo "Your PC will now automatically shutdown at 00:00 (midnight) every day."
|
||||
echo ""
|
||||
echo "Management commands:"
|
||||
echo " sudo midnight-shutdown-manager.sh status - Check status"
|
||||
echo " sudo midnight-shutdown-manager.sh logs - View shutdown logs"
|
||||
echo ""
|
||||
echo "Next shutdown: Tonight at 00:00"
|
||||
echo ""
|
||||
echo "WARNING: This will permanently shutdown your PC every night at midnight."
|
||||
echo "Make sure to save your work before midnight!"
|
||||
echo ""
|
||||
}
|
||||
|
||||
# Function to prompt for confirmation
|
||||
confirm_setup() {
|
||||
echo ""
|
||||
echo "WARNING: Auto-Shutdown Confirmation"
|
||||
echo "=================================="
|
||||
echo "This will set up your PC to automatically shutdown every day at midnight (00:00)."
|
||||
echo ""
|
||||
echo "Important considerations:"
|
||||
echo "- Any unsaved work will be lost"
|
||||
echo "- Running processes will be terminated"
|
||||
echo "- Downloads/uploads in progress will be interrupted"
|
||||
echo "- You'll need to manually power on your PC each day"
|
||||
echo ""
|
||||
read -p "Do you want to proceed? (y/N): " confirm
|
||||
|
||||
case "$confirm" in
|
||||
[yY]|[yY][eE][sS])
|
||||
echo "Proceeding with setup..."
|
||||
return 0
|
||||
;;
|
||||
*)
|
||||
echo "Setup cancelled."
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Main execution flow
|
||||
main() {
|
||||
# Check for sudo privileges
|
||||
check_sudo "$@"
|
||||
|
||||
# Confirm setup
|
||||
confirm_setup
|
||||
|
||||
# Create systemd files
|
||||
create_shutdown_service
|
||||
create_shutdown_timer
|
||||
create_management_script
|
||||
|
||||
# Enable and start timer
|
||||
enable_timer
|
||||
|
||||
# Test setup
|
||||
test_setup
|
||||
|
||||
# Show instructions
|
||||
show_instructions
|
||||
}
|
||||
|
||||
# Run main function
|
||||
main "$@"
|
||||
Loading…
Reference in New Issue
Block a user