inspectorG4dget inspectorG4dget - 3 months ago 8
Linux Question

Run command `at ` 5 seconds from now

As part of a slightly complex script, I need to tell a server to run a simulation. Normally, I would achieve this by doing

ssh user@server 'simulation/script'
. However, doing so would keep the ssh session alive until
'simulation/script'
is done, which is undesirable to me.

I recently learned about the
at
command, and it seems to fit into my problem well.

What I want to do now is to ssh into my server, and
at
my simulation script to run in 5 seconds (more than enough time for the ssh connection to be closed). Thus, once the ssh connection is closed within 5 seconds, the server will start the simulation without needing the ssh connection to stay alive.

What I'm having trouble with is the time expression that
at
needs in order to schedule a job "5 seconds from now"

I have tried the following time expressions, all of which give me errors:

now + 5 seconds
now + 5 sec
now + 5 s
now + 5seconds
now + 5sec
now + 5 s
now+5sec
now+5seconds
now+5s


How can I get my
at
to run my command "5 seconds from now"?

Answer

There's no seconds in at :

man at said :

  • specification of a date must follow the specification of the time of day. You can also give times like now + count time-units, where the time-units can be minutes, hours, days, or weeks and you can tell at to run the job today by suffixing the time with today and to run the job tomorrow by suffixing the time with tomorrow.

So instead of at, you could use a sleep I think.

See man 1 sleep


If you'd like to run ssh user@server 'simulation/script' without waiting, simply do :

ssh user@server 'simulation/script' &

the command will run in the background.

Moreover, as Rawkode said, nohup will help there.

So finally :

nohup ssh user@server 'simulation/script' &

with nohup, you can quit your terminal and have the ssh process alive.


EDIT: if you want to run the ssh command and close the connection :

ssh user@server 'simulation/script &'