I need my script to be executed a minute after each reboot. When I apply @reboot
in my crontab it is too early for my script - I want the script to be executed after all other tasks that are routinely run on reboot. How might I run the script sometime after reboot?
3 Answers
Is the script only ever intended to run one minute after boot up, or can it be used at other times, too? In the former case, you can add sleep 60
to the beginning of your script, or in the latter case, add it to the crontab file:
@reboot sleep 60 && my_script.sh
As has been pointed out by sr_, though, perhaps you are tackling this in the wrong way, and a proper init.d or rc.d script would be a more robust solution.
-
1Or use a command line option to tweak the delay (e.g.
script -s X
which would translate tosleep X
inside of the script).– peterphDec 7, 2012 at 10:24 -
-
@AndresAngel - I'm sorry, I don't know. I use FreeBSD which doesn't have
taskrunner
, nor, for that matter,/etc/init.d
– D_ByeApr 23, 2018 at 11:38 -
on my rhel7 sleep doesn't work at all, it sleeps forever & never comes back. Jun 4, 2018 at 14:02
If you need to execute something after reboot when network will become available, for example, you can write systemd unit that will be executed at required time (of course this will work only on systems with systemd).
To do so create file /etc/systemd/system/my_script.service
with following contents:
[Unit]
Description=My script that requires network
After=network.target
[Service]
Type=oneshot
ExecStart=/full/path/to/my_script.sh
[Install]
WantedBy=multi-user.target
Then execute:
sudo systemctl daemon-reload
sudo systemctl enable my_script
You're done!
-
2
-
-
It's not on the box I write this comment on right now. There's this Debian derivative called "Devuan". ;-) Mar 3, 2022 at 22:12
I would use at
. As in:
@reboot echo /root/bin/do_the_stuff | at now + 2 minutes
# at assigns it an execution time truncated to whole minutes,
# so this means it will execute in 1--2 minutes.
... with the added mentioned caveat that if what you really want is to run it after all other things, you should check how to do that in the init that your OS is using.
@reboot
lines because the first command "took over", although maybe a single&
could resolve this. Anyway, this worked for me, e.g.:@reboot mongod --port 27017 /var/lib/mongodb
and@reboot sleep 60 && /use/bin/node /home/me/server.js
. Had to use the sleep to give mongo a chance to boot up. Maybe there's a better way but this works for now.