59

We have in our organization around ~500 RedHat Linux machines.

On all the machines we installed applications and services under /etc/init.d, and oracle RAC servers. We intend to perform yum updates on all machines and after that take a reboot.

So I was wondering what command is safer:

reboot

or

shutdown -r now
Mat
  • 1,536
  • 1
  • 17
  • 21
dandan
  • 1,021
  • 4
  • 13
  • 21
  • 6
    Possible duplicate of: [What is the difference between reboot , init 6 and shutdown -r now?](http://unix.stackexchange.com/questions/64280/what-is-the-difference-between-reboot-init-6-and-shutdown-r-now) – Henrik Pingel Jun 30 '16 at 13:11
  • Is this RHEL6 or RHEL7? – Stefan Lasiewski Jun 30 '16 at 19:30
  • 1
    we have all kind - as redhat 4,5,6,7 – dandan Jun 30 '16 at 20:57
  • 6
    Let's rewind: Why do you think there might be a difference in safety? – underscore_d Jun 30 '16 at 21:35
  • 2
    @underscore_d: it's not unreasonable to think that one might be an "internal-use-only" command that doesn't do all the same clean shutdown steps. E.g. maybe one uses the other after doing some initial clean-shutdown steps. Of course, the man page explains that `reboot` is just a legacy command and still exists only for backwards compat. – Peter Cordes Jul 01 '16 at 20:05
  • 1
    @knowhy A question can't be a duplicate of a question on a _different_ site.. – Insane Jul 02 '16 at 01:36

6 Answers6

91

Shutdown is preferable because it allows you to specify the reason for the drastic action -- something you should always do. The message will be recorded in the log(s) for posterity. For example:

shutdown -r now 'Kernel upgrade requires reboot'

You can also perform a scheduled reboot -- by specifying something other than now as the reboot time:

shutdown -r 22:00 'Work around kernel memory leak'

Then your users will get periodic reminders to get out and so on -- the process will be more orderly and professional.

Mikhail T.
  • 2,272
  • 1
  • 22
  • 49
57

For Red Hat systems, there is no functional difference between reboot and shutdown -r now.

Do whatever is easier for you.

ewwhite
  • 194,921
  • 91
  • 434
  • 799
  • 18
    But one makes you type more and is fundamentally 'cooler'! – Insane Jun 30 '16 at 19:32
  • One requires super user access, the other can be executed by any user (unless restricted) from an X session. – Burhan Khalid Jul 04 '16 at 08:32
  • 2
    @BurhanKhalid If you have random people logging in to X sessions on servers, then you might have bigger problems than wondering which of two commands is "safer". – user Jul 04 '16 at 12:12
  • 1
    At least on Debian (though I'll readily admit I don't know about Red Hat, but Janne Pikkarainen's answer suggests it may be similar but different), `halt`, `reboot` and `poweroff` do not accept a reason message nor a time, as Mikhail T. explained. I think I would consider one tool to be able to do something that another doesn't allow for to be a "functional difference". – user Jul 04 '16 at 12:15
15

Using reboot is safer.

Using reboot your intent is clear and there is no way to mistype it for something else like shutdown -t now which could leads to a few headache if you are using on a remote server with limited control.

Antzi
  • 283
  • 1
  • 7
  • 6
    IMHO underrated answer. Very often we forget how important it is to make intentions clear and how much time and cuss words it saves in the long run! – RoughTomato Sep 26 '18 at 11:33
13

If you take a look, in RHEL 7 both /sbin/shutdown and /sbin/reboot are actually just symlinks to systemd's systemctl command. So, use whatever you want. No functional difference as ewwhite told, not even in earlier RHEL releases which did not yet use systemd.

Janne Pikkarainen
  • 31,454
  • 4
  • 56
  • 78
  • 13
    I don't find this argument very compelling: it's obvious that `/sbin/shutdown` and `/sbin/reboot` do *not* behave the same in all cases (in particular: `/sbin/shutdown` doesn't reboot by default!), so if they're symlinked to the same executable, then that executable must be examining its `ARGV[0]` and adjusting its behavior accordingly. While that certainly reduces the risk of *unintentional* differences, it's not compelling evidence that there are no *intentional* functional differences that the OP might want to know about. – ruakh Jul 02 '16 at 21:00
  • 4
    Beware of assuming a symlink implies equivalence, particularly if there are differing names involved. – mckenzm Jul 04 '16 at 03:01
  • ruakh is right – think about it for a moment, even though `reboot` is symlinked to `systemctl`, you cannot use e.g. `reboot status whatever.service` like you would with the latter, can you? – user1686 Jul 04 '16 at 07:54
2

For modern RHEL you are recommended to use the systemctl command as summarised here: [recent] RHEL distributions should use the new systemctl command to issue poweroff/reboot. As stated in the manpages of reboot and shutdown they are "a legacy command available for compatibility only.".

However, if you use many different distributions, or distributions of various vintages, then perhaps stick with shutdown -r now 'reason for shutdown'.

The main reason to use reboot would be to avoid the risk of forgetting to add the -r when using shutdown -r on a remote machine, which could easily result in not being able to login again and having to use the remote admin (if available) to restart the machine.

robocat
  • 121
  • 2
0

Older systems definitely made a distinction between shutdown and reboot. The latter would not shut down services or necessarily even sync disk buffers. In heterogeneous environments -- or to avoid precedent that could be dangerous in the future when encountering other *ix implementations -- there's value in getting into the shutdown habit.