mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2024-11-25 06:01:04 +01:00
Check if nothing got defreezed during the freezing process
This commit is contained in:
parent
0ba36f3671
commit
5605e0bcc3
@ -70,6 +70,10 @@ system_maintenance_cleanup_services:
|
|||||||
- "cleanup-disc-space"
|
- "cleanup-disc-space"
|
||||||
- "cleanup-failed-docker-backups"
|
- "cleanup-failed-docker-backups"
|
||||||
|
|
||||||
|
### Freeze services (wait until they are finished to be sure that nobody else is doing stuff in the fridge)
|
||||||
|
- "system-maintenance-service-freeze"
|
||||||
|
- "system-maintenance-service-defrost"
|
||||||
|
|
||||||
### Services that Manipulate the System
|
### Services that Manipulate the System
|
||||||
system_maintenance_manipulation_services:
|
system_maintenance_manipulation_services:
|
||||||
- "heal-docker"
|
- "heal-docker"
|
||||||
|
@ -28,34 +28,54 @@ def check_service_active(service_name):
|
|||||||
"""Check if a service is active or activating."""
|
"""Check if a service is active or activating."""
|
||||||
result = subprocess.run(['systemctl', 'is-active', service_name], stdout=subprocess.PIPE)
|
result = subprocess.run(['systemctl', 'is-active', service_name], stdout=subprocess.PIPE)
|
||||||
service_status = result.stdout.decode('utf-8').strip()
|
service_status = result.stdout.decode('utf-8').strip()
|
||||||
return service_status in ['active', 'activating']
|
return_value=service_status in ['active', 'activating']
|
||||||
|
if return_value:
|
||||||
|
print(f"Service {service} is active.");
|
||||||
|
else:
|
||||||
|
print(f"Service {service} is not active.");
|
||||||
|
return return_value
|
||||||
|
|
||||||
|
def check_any_service_active(services):
|
||||||
|
"""Check if any service in the list is active or activating."""
|
||||||
|
for service in services:
|
||||||
|
if check_service_active(service_name):
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
def freeze(services_to_wait_for, ignored_services, timeout_sec):
|
def freeze(services_to_wait_for, ignored_services, timeout_sec):
|
||||||
break_time_sec=5
|
break_time_sec=5
|
||||||
attempt=0
|
attempt=0
|
||||||
max_attempts=timeout_sec/break_time_sec
|
max_attempts=timeout_sec/break_time_sec
|
||||||
# Filter services that exist and are not in the ignored list
|
any_service_active=True
|
||||||
for service in services_to_wait_for:
|
|
||||||
print(f"\nFreezing: {service}")
|
print("Checking if any services is active.")
|
||||||
if service in ignored_services:
|
# This guaranties that no service will be started in the between time
|
||||||
print(f"{service} will be ignored.")
|
while any_service_active:
|
||||||
else:
|
# Filter services that exist and are not in the ignored list
|
||||||
while check_service_active(service):
|
for service in services_to_wait_for:
|
||||||
current_time_iso = datetime.now().isoformat()
|
print(f"\nFreezing: {service}")
|
||||||
attempt += 1
|
if service in ignored_services:
|
||||||
print(f"{current_time_iso}#{attempt}/{max_attempts}: Waiting for {break_time_sec} seconds for {service} to stop...")
|
print(f"{service} will be ignored.")
|
||||||
time.sleep(break_time_sec)
|
|
||||||
if attempt > max_attempts:
|
|
||||||
raise Exception(f"Error: Maximum attempts ({max_attempts}) reached. Exit.")
|
|
||||||
|
|
||||||
# Stop and disable the corresponding timer, if it exists
|
|
||||||
if service_file_exists(service,"timer"):
|
|
||||||
timer_name = service + ".timer"
|
|
||||||
subprocess.run(['systemctl', 'stop', timer_name])
|
|
||||||
subprocess.run(['systemctl', 'disable', timer_name])
|
|
||||||
print(f"{timer_name} stopped and disabled.")
|
|
||||||
else:
|
else:
|
||||||
print(f"Skipped.")
|
while check_service_active(service):
|
||||||
|
current_time_iso = datetime.now().isoformat()
|
||||||
|
attempt += 1
|
||||||
|
print(f"{current_time_iso}#{attempt}/{max_attempts}: Waiting for {break_time_sec} seconds for {service} to stop...")
|
||||||
|
time.sleep(break_time_sec)
|
||||||
|
if attempt > max_attempts:
|
||||||
|
raise Exception(f"Error: Maximum attempts ({max_attempts}) reached. Exit.")
|
||||||
|
|
||||||
|
# Stop and disable the corresponding timer, if it exists
|
||||||
|
if service_file_exists(service,"timer"):
|
||||||
|
timer_name = service + ".timer"
|
||||||
|
subprocess.run(['systemctl', 'stop', timer_name])
|
||||||
|
subprocess.run(['systemctl', 'disable', timer_name])
|
||||||
|
print(f"{timer_name} stopped and disabled.")
|
||||||
|
else:
|
||||||
|
print(f"No timer to stop.")
|
||||||
|
print("Checking if any of the previous deactivated services is active.")
|
||||||
|
any_service_active=check_any_service_active(services_to_wait_for)
|
||||||
|
|
||||||
print("\nAll required services have stopped.")
|
print("\nAll required services have stopped.")
|
||||||
|
|
||||||
def defrost(services_to_wait_for, ignored_services):
|
def defrost(services_to_wait_for, ignored_services):
|
||||||
|
Loading…
Reference in New Issue
Block a user