How can I run a command after boot?

27

13

I would like to run the simple shell command echo 1 > /proc/sys/kernel/sysrq at each boot, to enable the sysrq keys. When in boot should this be done, and where should I put a script to do it?

Demi

Posted 2013-12-08T07:10:46.440

Reputation: 718

All Linux distributions already sets the time. Maybe the battery to your RTC on the motherboard is low? – Some programmer dude – 2012-09-10T06:35:38.527

@JoachimPileborg actually there is no RTC on my motherboard :) It's a embedded system board without RTC. – None – 2012-09-10T06:43:15.813

2I beg to differ, @davidgo. The references you are quoting are a tad obsolete: while crontab does work, /etc/rc.local does not on systemd distros like Arch Linux. By referring to them, we might be sending Demetri on a wild goose chase. Some updating, at times, needs to be done. – MariusMatutiae – 2013-12-08T07:41:42.493

Answers

37

Depends on distros.

If you are on Debian-derived distros, there are at least two proper places, /etc/rc.local and crontab. You may invoke crontab as root,

   crontab -e

and then insert this line

   @reboot /home/my_name/bin/my_command

where my_command is an executable file (chmod 755 my_command).

Alternatively, you may place a line like this

   /home/my_name/bin/my_command

in /etc/rc.local, and this will be executed last. In any case, pls do remember you are using root environment, not yours. Also for this reason, it is best to use absolute paths.

If you are on a systemd distro (Arch Linux, Fedora 19,...) the first option (crontab) is still valid, while the second one (/etc/rc.local) does not exist any longer. In this case, you should learn how to start a service to be run by systemctl, but this may be more than you bargained for with your simple question.

MariusMatutiae

Posted 2013-12-08T07:10:46.440

Reputation: 41 321

2

maybe this is an unknown alias for me but @boot does not exist, just @reboot http://www.debianhelp.co.uk/crontab.htm

– Zarathustra – 2014-09-14T00:00:45.843

1

Can you confirm this for Fedora ? My searching tells me that rc.local will still run if it exists and is executable, but is not set up by default. I perceived troubling ramifications if rc.local does not run ! (I could only find references for this for Fedora 18 - http://forums.fedoraforum.org/showthread.php?t=291889)

– davidgo – 2013-12-08T07:43:23.740

You are right, in Fedora 19 you might still have it, if you really want it. But it is no longer packaged, http://docs.fedoraproject.org/en-US/Fedora/16/html/Release_Notes/sect-Release_Notes-Changes_for_Sysadmin.html bullet 3.2.4. Also, it does not exist in Arch Linux altogether, so I thought it safe to include a warning about that.

– MariusMatutiae – 2013-12-08T07:49:16.537

19

If your system is running a version of cron that supports it (specifically Vixie cron), you can use @reboot in a cron job.

This is one of 8 special strings that it supports.

Quoting the crontab(5) man page (from my Ubuntu 12.04 system):

Instead of the first five fields, one of eight special strings may appear:

string         meaning
------         -------
@reboot        Run once, at startup.
@yearly        Run once a year, "0 0 1 1 *".
@annually      (same as @yearly)
@monthly       Run once a month, "0 0 1 * *".
@weekly        Run once a week, "0 0 * * 0".
@daily         Run once a day, "0 0 * * *".
@midnight      (same as @daily)
@hourly        Run once an hour, "0 * * * *".

Please note that startup, as far as @reboot is concerned, is the time when the cron(8) daemon startup. In particular, it may be before some system daemons, or other facilities, were startup. This is due to the boot order sequence of the machine.

This is far from being the only way to run something at boot time, but it's an alternative.

Keith Thompson

Posted 2013-12-08T07:10:46.440

Reputation: 4 645

2How can this answer have been written more than a year before the original question? – MariusMatutiae – 2017-05-16T06:09:50.967

1

@MariusMatutiae https://meta.stackoverflow.com/q/294543/827263

– Keith Thompson – 2017-05-16T07:03:49.177

+1 for specifying that requires Vixie cron. – Javier Arias – 2017-07-11T13:52:13.127

9

Pretty much all variants of Linux (going back a long, long time) have a file /etc/rc.local which runs on startup - you can just add the command to it.

That said, you don't even need to do that. The "correct" way would be to modify / add the line kernel.sysrq = 1 into /etc/sysctl.conf

davidgo

Posted 2013-12-08T07:10:46.440

Reputation: 49 152