this post was submitted on 08 Dec 2024
13 points (93.3% liked)
Linux Questions
1170 readers
24 users here now
Linux questions Rules (in addition of the Lemmy.zip rules)
- stay on topic
- be nice (no name calling)
- do not post long blocks of text such as logs
- do not delete your posts
- only post questions (no information posts)
Tips for giving and receiving help
- be as clear and specific
- say thank you if a solution works
- verify your solutions before posting them as facts.
Any rule violations will result in disciplinary actions
founded 1 year ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
What exit code so you get from curl?
Ah!
This outputs:
Is
$?
referring to the exit command of the curl in the subshell? Or is it referring to the assignment of the subshell's output to the TEST var?Exit code 7 means curl couldn't connect to the host, so I would try just curling a URL you know is valid directly, not setting it as an env var, to see what happens then.
So I guess the question is why is curl failing from within the subshell?
I stumbled on a possible cause, but more background is necessary to explain.
The script actually creates an ssh tunnel (to the Traefik host) and then does the curl. So the code is like:
What I learned is that when i run the script, the tunnel is successfully created but the curl fails; but then if I run the script again a second tunnel is created and the curl works fine.
Are you trying to reach a URL on the same host you're ssh-ing to? That would create some interesting effects.
Especially since it works the second time it could mean that the second time you're actually on the host and ssh-ing to the host itself and then curling localhost.
Ah, I see. ~~I guess they get different contexts or something?~~ (Edit: I re-read your post and this does not make any sense :)) What if you chain the ssh command and the curl using &&?
I'm not sure how to chain these 2 commands with
&&
, because the SSH command is being put in the background with&
.This doesn't work:
Perhaps I don't need it in the background - the goal was to establish the tunnel and then continue with the script without it hanging until the ssh command is canceled.
Try to add -f to ssh command
That seems to have done it!
Running the
ssh -f...
instead ofssh.... &
seems to work first time and every time.It makes it so
SSH_PID=$!
doesn't work, but I usedpgrep -f <ssh command>
instead.Thanks!
You are very welcome! That was the hypothesis, that ssh doesn’t go into background as you want it to, since it works for the second run, but tunnel is there after the first.
Someone else suggested the env vars arent being expanded correctly inside the $(curl ...), which could be the culprit ... If a straight up URL works that would indicate that something like that is happening.
That said, I just tried setting an env var called URL="" and curling it, and curl said exit code 2, no URL specified, so something else is going on here.
changing how I called
ssh
in the background made the difference (https://lemmy.thewooskeys.com/comment/521006).Thanks for your time and assistance