diff --git a/cleanup_services.sh b/cleanup_services.sh new file mode 100755 index 0000000..2d0e45e --- /dev/null +++ b/cleanup_services.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +for service in $(systemctl list-units --type=service --no-legend | grep example | awk '{print $1}'); do + sudo systemctl stop $service + echo "Stopped $service" +done diff --git a/example.service b/example.service new file mode 100644 index 0000000..a29da95 --- /dev/null +++ b/example.service @@ -0,0 +1,12 @@ +[Unit] +Description=Example Service +Requires=example.socket +After=example.socket + +[Service] +User=root +Group=root +ExecStart=/root/.pyenv/versions/venv/bin/python /home/john/ad-tunnel/run_service.py + +[Install] +WantedBy=multi-user.target diff --git a/example.socket b/example.socket index 0cb9fe1..1feb39d 100644 --- a/example.socket +++ b/example.socket @@ -1,9 +1,10 @@ [Unit] Description=Example Unix Socket +StopWhenUnneeded=true [Socket] ListenStream=/run/example.sock -Accept=yes +Accept=no [Install] -WantedBy=sockets.target \ No newline at end of file +WantedBy=sockets.target diff --git a/example@.service b/example@.service deleted file mode 100644 index 4cc75c6..0000000 --- a/example@.service +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=Example Service - -[Service] -ExecStart=/bin/bash -c 'echo "Hello, world!" > /tmp/example_output.txt' -StandardInput=socket diff --git a/install_service.py b/install_service.py index fd94f7b..1ce0104 100755 --- a/install_service.py +++ b/install_service.py @@ -16,9 +16,9 @@ def create_symlink(source, target): # Create the symbolic link target_path.symlink_to(source) - print(f'Created symlink: {source} -> {target}') + print(f'Created symlink: [magenta]{source}[/] -> [magenta]{target}[/]') except OSError as e: - print(f'Error creating symlink: {e}') + print(f'Error creating symlink: [bold red]{e}[/]') def run_command(command): @@ -34,7 +34,7 @@ def main(): # Define the source and target paths socket_file = 'example.socket' - service_file = 'example@.service' + service_file = 'example.service' # Create symlinks create_symlink(repo_dir / socket_file, systemd_dir / socket_file) diff --git a/run_service.py b/run_service.py new file mode 100755 index 0000000..62d8e5f --- /dev/null +++ b/run_service.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 + +import os +import subprocess + +from rich import print + +os.chdir('/root') +cmd = ['code', 'tunnel'] +# cmd = ['echo', '"Hello world"'] + + +print('PATH:\n' + '\n'.join(f' - {p}' for p in os.environ['PATH'].split(':'))) +try: + result = subprocess.run( + cmd, + shell=True, + env=os.environ, + text=True, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + ) + result.check_returncode() +except subprocess.CalledProcessError as e: + print(e) +finally: + print(result.stdout) diff --git a/test_socket.py b/test_socket.py new file mode 100755 index 0000000..17e38c8 --- /dev/null +++ b/test_socket.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python + +import socket +from time import sleep + +from rich.console import Console + +console = Console() +print = console.print + +with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as sock: + try: + sock.connect('/run/example.sock') + except Exception: + raise + else: + with console.status('Connected...'): + while True: + try: + sleep(0.1) + except KeyboardInterrupt: + break + finally: + print('Exiting')