Provided by: libpam-modules_1.1.8-3.6ubuntu2.18.04.6_amd64 bug

NAME

       update-motd - dynamic MOTD generation

SYNOPSIS

       /etc/update-motd.d/*

DESCRIPTION

       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 logins.

       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 /run/motd.dynamic.  The order of
       script  execution  is  determined  by  the  run-parts(8)  --lsbsysinit  option  (basically
       alphabetical order, with a few caveats).

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

BEST PRACTICES

       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:

         /etc/update-motd.d/50-news
         #!/bin/sh
         out=/run/foo
         script="w3m -dump http://news.google.com/"
         if [ -f "$out" ]; then
           # Output exists, print it
           echo
           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" &
           fi
         else
           # No cache at all, so update in the background
           $script > "$out" &
         fi

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

         /etc/update-motd/05-lsb-release
         #!/bin/sh
         echo
         lsb-release -a

FILES

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

SEE ALSO

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

AUTHOR

       This  manpage  and  the   update-motd   framework   was   written   by   Dustin   Kirkland
       <kirkland@canonical.com>  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.