24

I want to create a cron job which executes daiy at assigned time and it restart the ubuntu server.

I try to add reboot only in cron, but it is not working, whereas it works when I try to execute it from CLI.

Please advise, what command should I add in cron, so that it reboot the server daily at specific time.

djmzfKnm
  • 445
  • May I ask why you need to reboot a server on a daily basis? This is an indication to me you're doing things wrong. Probably. – gertvdijk Jan 07 '13 at 13:04
  • 4
    @gertvdijk i've run into situations where you need to reboot a machine regularly. Proprietary software that gets a bad memory leak after ~30 hours of uptime, things like that. – jrg Jan 07 '13 at 13:08
  • 1
    Gaming servers (cough) Minecraft (cough) often ramleak or somehow fork into hundreds of processes. – Kaz Wolfe Dec 23 '13 at 21:45
  • this post is also useful http://askubuntu.com/questions/327015/how-do-i-configure-ubuntu-to-reboot-every-day-at-a-given-time – kevin Jan 28 '17 at 13:11
  • If the problem is that some application is leaking memory over time, a better solution wold be to just restart that application service. – Soren A Feb 12 '20 at 09:44

2 Answers2

41

You need to run the following command:

/sbin/shutdown -r now

with root pirviliges. The way to do it is to use root's crontab, not your user crontab. A sudo before the usual crontab command does that:

sudo crontab -e

Tip: You can switch the shell's standard editor for things like crontab and visudo with sudo update-alternatives --config editor and then select the editor of your choice.

Editing the crontab you should add the following line to your file:

# For more information see the manual pages of crontab(5) and cron(8)
# 
# m h  dom mon dow   command

@daily root /sbin/shutdown -r now

One has to remove "root" if you edited with the command: sudo crontab -e.

The "@daily" here is a shortcut for every day at midnight (equivalent to "0 0 * * *"). By the way - why do you want a daily reboot?

EDIT - see https://help.ubuntu.com/community/CronHowto for the following: "Crontab commands are generally stored in the crontab file belonging to your user account (and executed with your user's level of permissions). If you want to regularly run a command requiring administrative permissions, edit the root crontab file: sudo crontab -e"

EDIT - thanks to @charlesbridge for his comment - edited answer to include the full path

1

in my situation the best working method was

systemctl reboot
Paul
  • 4,511
Mirek K
  • 11