40 lines
1.1 KiB
Python
40 lines
1.1 KiB
Python
#!/usr/bin/env python3
|
|
"""Пишет описание службы launchd для сервера панели: запуск при входе, перезапуск при падении.
|
|
|
|
launchagent.py write <plist> <python> <claude_agents.py> <log>
|
|
"""
|
|
import os
|
|
import plistlib
|
|
import sys
|
|
|
|
LABEL = "com.andrey.claude-agents" # то же, что SERVICE_LABEL в claude_agents.py
|
|
|
|
|
|
def plist(python, script, log):
|
|
return {
|
|
"Label": LABEL,
|
|
"ProgramArguments": [python, script, "--headless"],
|
|
"RunAtLoad": True,
|
|
"KeepAlive": True,
|
|
"StandardOutPath": log,
|
|
"StandardErrorPath": log,
|
|
}
|
|
|
|
|
|
def main():
|
|
if len(sys.argv) != 6 or sys.argv[1] != "write":
|
|
print(__doc__.strip(), file=sys.stderr)
|
|
sys.exit(2)
|
|
path, python, script, log = (os.path.expanduser(a) for a in sys.argv[2:])
|
|
os.makedirs(os.path.dirname(path), exist_ok=True)
|
|
os.makedirs(os.path.dirname(log), exist_ok=True)
|
|
tmp = path + ".tmp"
|
|
with open(tmp, "wb") as f:
|
|
plistlib.dump(plist(python, script, log), f, fmt=plistlib.FMT_XML)
|
|
os.replace(tmp, path)
|
|
print(path)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|