What's Your System's Uptime?
Keep track of your system's uptime and downtime with the
Finding your system's uptime is easy if the "beginning" means the last startup; the
uptime command reports that information. But what happens
if by "beginning" you mean the first startup ever of the system? Or the last 365
days? Or the last month?
Is there any way to have an accumulated uptime—or even better, a look at the whole
system's life? For example, cars have odometers, and you can see the
since the first day. For computers, a tool
was developed exactly for this task:
tuptime reports the historical and statistical running and stopped time
of your system, keeping track between restarts. Its main goals are:
- Count system startups.
- Register the first boot time (since installation).
- Count intended and accidental shutdowns.
- Show the uptime and downtime percentage since the first boot time.
- Show the accumulated system uptime, downtime and total.
- Show the longest, shortest and average uptime and downtime.
- Show the current uptime.
- Print a formatted table or list with most of the previous values.
- Register used kernels.
- Create reports since and/or until a given startup or timestamp.
- Create reports in CSV format.
It works very simply.
tuptime falls to the init manager for
execution at startup and shutdown, and then into a cron task that launches
regular executions in the meantime—there isn't any dæmon to
about. Internally, it looks at the
(available in /proc/stat)
uptime value (from /proc/uptime), and that's basically
The installation process is easy in Debian, Ubuntu and derivative distributions, using their respective package managers, and it should be available in all the official repositories. As prerequisites, it needs Python 3 and the SQLite library, which usually are included in core packages by default.
Once it's available on your system, you can get the information. It has three output formats: the default is a summary, and there also are table and list outputs to print the registered behavior.
Figure 1. Example
tuptime Execution after
The first execution reports the time since the system was booted, and the lines are self-explanatory (note that the date format is based on the system's locale settings):
$ tuptime System startups: 1 since 22:21:49 02/02/18 System shutdowns: 0 ok - 0 bad System uptime: 100.0 % - 40 minutes and 22 seconds System downtime: 0.0 % - 0 seconds System life: 40 minutes and 22 seconds Largest uptime: 40 minutes and 22 seconds from ↪22:21:49 02/02/18 Shortest uptime: 40 minutes and 22 seconds from ↪22:21:49 02/02/18 Average uptime: 40 minutes and 22 seconds Largest downtime: 0 seconds Shortest downtime: 0 seconds Average downtime: 0 seconds Current uptime: 40 minutes and 22 seconds since ↪22:21:49 02/02/18
When getting this report from an older system (see below), the information becomes more
interesting. Apart from the fact that the counts increase, there also are
about the behavior. For example, the
System shutdowns line has
11 "bads", reflecting that the shutdown process wasn't executed
correctly, maybe due to power failure or system hangs. The percentage
of uptime and downtime reflects that this report is from a lightly
$ tuptime System startups: 688 since 22:21:49 09/10/15 System shutdowns: 676 ok <- 11 bad System uptime: 4.6 % - 40 days, 7 hours, 7 minutes ↪and 48 seconds System downtime: 95.4 % - 2 years, 105 days, 17 hours, ↪19 minutes and 25 seconds System life: 2 years, 146 days, 0 hours, 27 minutes ↪and 13 seconds Largest uptime: 12 hours, 51 minutes and 48 seconds from ↪09:29:18 02/03/16 Shortest uptime: 5 seconds from 22:20:54 12/02/17 Average uptime: 1 hour, 24 minutes and 21 seconds Largest downtime: 23 days, 3 hours, 23 minutes and 30 seconds ↪from 13:49:42 04/12/16 Shortest downtime: 8 seconds from 17:08:00 03/01/17 Average downtime: 1 day, 5 hours, 11 minutes and 44 seconds Current uptime: 1 hour, 50 minutes and 0 seconds since ↪17:37:32 02/07/18
You can change the report to a table format (
-t) used in
combination with any
other options, in this case, since the last two startups (
$ tuptime -t -S -2 687 14:07:36 02/04/18 1 hour, 28 minutes and 22 seconds ↪15:35:58 02/04/18 OK 3 days, 2 hours, 1 minute ↪and 34 seconds 688 17:37:32 02/07/18 1 hour, 26 minutes and 13 seconds
Or you can change to the list report format (
-l) and show the results
until the second startup (
$ tuptime -l -U 2 Startup: 1 at 22:21:49 09/10/15 Uptime: 50 minutes and 44 seconds Shutdown: OK at 23:12:33 09/10/15 Downtime: 13 seconds Startup: 2 at 23:12:46 09/10/15 Uptime: 1 minute and 2 seconds Shutdown: OK at 23:13:48 09/10/15 Downtime: 18 hours, 57 minutes and 18 seconds
tuptime also accepts ranges between specific dates using the
tuntil options. Both need an argument with the epoch date in seconds. Another
example is a report from the last 365 days until the present, maybe to check
your provider's SLA.
First, get the epoch date of one year ago using the
$ date --date="1 year ago" +%s 1486490845
Next, pass it under
$ tuptime --tsince 1486490845
Here's an example of a report from the first day to the last day of
the previous month in CSV format. Again, use
date to get the first and
last days as a timestamp and pass both to
$ date -d "-1 month 00:00" +%s 1514761200 $ date -d "this month -1 second 00:00" +%s 1517439599 $ tuptime --tsince 1514761200 --tuntil 1517439599 --csv
Or you can list all the entries (
-l) ordered by the uptime
-o u), instead of
the startup number, in reverse order (
-r), including the kernel that was
$ tuptime -l -o u -r -k
The manual has detailed information for every option and includes some interesting notes about sync date and time that can help in case of problems. For more information see https://github.com/rfrail3/tuptime.git.