Man Linux: Main Page and Category List


       update-motd - dynamic MOTD generation




       UNIX/Linux system adminstrators often communicate important information
       to console and remote users by maintaining text in the file  /etc/motd,
       which  is  displayed  by  the  pam_motd(8)  module on interactive shell

       Traditionally, this file is static text,  typically  installed  by  the
       distribution  and  only  updated on release upgrades, or overwritten by
       the local administrator with pertinent information.

       Ubuntu introduced the update-motd framework, by which  the  motd(5)  is
       dynamically assembled from a collection of scripts at login.

       Executable  scripts in /etc/update-motd.d/* are executed by pam_motd(8)
       as the root user at each login, and this information is concatenated in
       /var/run/motd.  The order of script execution is determined by the run-
       parts(8) --lsbsysinit option (basically alphabetical order, with a  few

       On   Ubuntu   systems,  /etc/motd  is  typically  a  symbolic  link  to


       MOTD  fragments  must  be  scripts  in  /etc/update-motd.d,   must   be
       executable, and must emit information on standard out.

       Scripts  should be named named NN-xxxxxx where NN is a two digit number
       indicating their position in the MOTD, and  xxxxxx  is  an  appropriate
       name for the script.

       Scripts   must   not   have   filename   extensions,  per  run-parts(8)
       --lsbsysinit instructions.

       Packages should add scripts directly  into  /etc/update-motd.d,  rather
       than  symlinks to other scripts, such that administrators can modify or
       remove these scripts and upgrades will  not  wipe  the  local  changes.
       Consider  using  a  simple  shell  script that simply calls exec on the
       external utility.

       Long running operations (such as network calls) or  resource  intensive
       scripts  should  cache  output,  and  only  update that output if it is
       deemed expired.  For instance:

         script="w3m -dump"
         if [ -f "$out" ]; then
           # Output exists, print it
           cat "$out"
           # See if it's expired, and background update
           lastrun=$(stat -c %Y "$out") || lastrun=0
           expiration=$(expr $lastrun + 86400)
           if [ $(date +%s) -ge $expiration ]; then
             $script > "$out" &
           # No cache at all, so update in the background
           $script > "$out" &

       Scripts should emit a blank line before output, and end with a  newline
       character.  For instance:

         lsb-release -a


       /etc/motd, /var/run/motd, /etc/update-motd.d


       motd(5), pam_motd(8), run-parts(8)


       This  manpage  and  the  update-motd  framework  was  written by Dustin
       Kirkland <> for Ubuntu systems (but may  be  used
       by  others).   Permission  is granted to copy, distribute and/or modify
       this document under the  terms  of  the  GNU  General  Public  License,
       Version 3 published by the Free Software Foundation.

       On  Debian systems, the complete text of the GNU General Public License
       can be found in /usr/share/common-licenses/GPL.