# Fixed script for Amazon Linux 2023 $setupScript = @' #!/bin/bash cd /home/ec2-user/AWS_Portfolio_Manager # Install supervisor via pip sudo pip3 install supervisor --break-system-packages # Create supervisor directories sudo mkdir -p /etc/supervisor/conf.d sudo mkdir -p /var/log/supervisor # Create main supervisor config sudo tee /etc/supervisord.conf > /dev/null <<'MAINEOF' [unix_http_server] file=/tmp/supervisor.sock [supervisord] logfile=/var/log/supervisor/supervisord.log logfile_maxbytes=50MB logfile_backups=10 loglevel=info pidfile=/tmp/supervisord.pid nodaemon=false minfds=1024 minprocs=200 [rpcinterface:supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [supervisorctl] serverurl=unix:///tmp/supervisor.sock [include] files = /etc/supervisor/conf.d/*.conf MAINEOF # Create systemd service for supervisor sudo tee /etc/systemd/system/supervisord.service > /dev/null <<'SYSEOF' [Unit] Description=Supervisor process control system After=network.target [Service] Type=forking ExecStart=/usr/local/bin/supervisord -c /etc/supervisord.conf ExecReload=/usr/local/bin/supervisorctl reload ExecStop=/usr/local/bin/supervisorctl shutdown Restart=on-failure [Install] WantedBy=multi-user.target SYSEOF # Enable and start supervisord sudo systemctl daemon-reload sudo systemctl enable supervisord sudo systemctl start supervisord # Kill any running streamlit pkill -f 'streamlit run' || true # Create supervisor config for streamlit sudo tee /etc/supervisor/conf.d/streamlit.conf > /dev/null <<'EOF' [program:streamlit] directory=/home/ec2-user/AWS_Portfolio_Manager command=/home/ec2-user/AWS_Portfolio_Manager/venv/bin/streamlit run application.py --server.port 5000 --server.address 0.0.0.0 user=ec2-user autostart=true autorestart=true stderr_logfile=/var/log/streamlit.err.log stdout_logfile=/var/log/streamlit.out.log environment=HOME="/home/ec2-user",USER="ec2-user" EOF # Reload and start sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start streamlit '@ # Write with Unix line endings [System.IO.File]::WriteAllText("$PWD\setup_supervisor.sh", $setupScript.Replace("`r`n", "`n"), [System.Text.Encoding]::ASCII) # Now run on all instances . .\get-ips.ps1 $instanceIds = aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names portfolio-manager-asg --query 'AutoScalingGroups[0].Instances[?HealthStatus==`Healthy`].InstanceId' --output text $instanceIdArray = $instanceIds -split "`t" ssh-keygen -t rsa -f temp_supervisor_key -N '""' -q for ($i = 0; $i -lt $global:instances.Count; $i++) { $ip = $global:instances[$i] $instanceId = $instanceIdArray[$i] Write-Host "Setting up supervisor on $ip..." -ForegroundColor Yellow aws ec2-instance-connect send-ssh-public-key --instance-id $instanceId --instance-os-user ec2-user --ssh-public-key file://temp_supervisor_key.pub | Out-Null # Copy script and execute scp -i temp_supervisor_key -o StrictHostKeyChecking=no setup_supervisor.sh ec2-user@${ip}:/tmp/ ssh -i temp_supervisor_key -o StrictHostKeyChecking=no ec2-user@$ip "bash /tmp/setup_supervisor.sh" if ($LASTEXITCODE -eq 0) { Write-Host "Supervisor configured on $ip" -ForegroundColor Green } else { Write-Host "Check errors on $ip" -ForegroundColor Yellow } } Remove-Item temp_supervisor_key, temp_supervisor_key.pub, setup_supervisor.sh -ErrorAction SilentlyContinue Write-Host "`nSetup complete! Verifying..." -ForegroundColor Green # Verify foreach ($ip in $global:instances) { Write-Host "`nChecking $ip..." -ForegroundColor Cyan ssh -i "C:\Users\mccoo\.ssh\aws-eb" ec2-user@$ip "sudo supervisorctl status" 2>$null }