43 lines
1.6 KiB
Python
43 lines
1.6 KiB
Python
#!/usr/bin/env python3
|
|
"""Install current-user runtime recovery and telemetry. Enable lingering for boot startup."""
|
|
from pathlib import Path
|
|
import shutil,subprocess
|
|
repo=Path(__file__).resolve().parents[2]
|
|
units=Path.home()/'.config/systemd/user';units.mkdir(parents=True,exist_ok=True)
|
|
node=shutil.which('node');python=shutil.which('python3');assert node and python
|
|
(units/'azerothai-runtime.service').write_text(f'''[Unit]
|
|
Description=AzerothAI web runtime
|
|
After=network-online.target
|
|
[Service]
|
|
WorkingDirectory={repo}
|
|
ExecStart={node} {repo}/scripts/start-local-runtime.mjs --lan
|
|
Restart=always
|
|
RestartSec=5
|
|
StandardOutput=journal
|
|
StandardError=journal
|
|
[Install]
|
|
WantedBy=default.target
|
|
''')
|
|
(units/'azerothai-operations.service').write_text(f'''[Unit]
|
|
Description=AzerothAI telemetry and transport retention
|
|
After=azerothai-runtime.service
|
|
[Service]
|
|
Type=oneshot
|
|
WorkingDirectory={repo}
|
|
ExecStart=/usr/bin/sg docker -c "{python} {repo}/scripts/operations-agent.py"
|
|
TimeoutStartSec=50
|
|
''')
|
|
(units/'azerothai-operations.timer').write_text('''[Unit]
|
|
Description=AzerothAI one-minute health sampling
|
|
[Timer]
|
|
OnBootSec=90
|
|
OnUnitActiveSec=60
|
|
[Install]
|
|
WantedBy=timers.target
|
|
''')
|
|
subprocess.run(['systemctl','--user','daemon-reload'],check=True)
|
|
# Runtime is enabled but started separately after handing over its existing process.
|
|
subprocess.run(['systemctl','--user','enable','azerothai-runtime.service','azerothai-operations.timer'],check=True)
|
|
subprocess.run(['systemctl','--user','start','azerothai-operations.timer'],check=True)
|
|
print('User services installed. Start the runtime after stopping its previous unmanaged process.')
|