function drush_shutdown

8.0.x drush_shutdown()
6.x drush_shutdown()
7.x drush_shutdown()
3.x drush.php drush_shutdown()
4.x drush.php drush_shutdown()
5.x drush_shutdown()
master drush_shutdown()

Shutdown function for use while Drush and Drupal are bootstrapping and to return any registered errors.

The shutdown command checks whether certain options are set to reliably detect and log some common Drupal initialization errors.

If the command is being executed with the --backend option, the script will return a json string containing the options and log information used by the script.

The command will exit with '1' if it was successfully executed, and the result of drush_get_error() if it wasn't.

1 string reference to 'drush_shutdown'
drush_preflight_prepare in includes/
Prepare Drush for preflight.


includes/, line 977
Preflight, postflight and shutdown code.


function drush_shutdown() {
  // Mysteriously make $user available during sess_write(). Avoids a NOTICE.
  global $user;

  if (!drush_get_context('DRUSH_EXECUTION_COMPLETED', FALSE) && !drush_get_context('DRUSH_USER_ABORT', FALSE)) {
    $php_error_message = '';
    if ($error = error_get_last()) {
      $php_error_message = "\n" . dt('Error: !message in !file, line !line', array('!message' => $error['message'], '!file' => $error['file'], '!line' => $error['line']));
    // We did not reach the end of the drush_main function,
    // this generally means somewhere in the code a call to exit(),
    // was made. We catch this, so that we can trigger an error in
    // those cases.
    drush_set_error("DRUSH_NOT_COMPLETED", dt("Drush command terminated abnormally due to an unrecoverable error.!message", array('!message' => $php_error_message)));
    // Attempt to give the user some advice about how to fix the problem

  // @todo Ask the bootstrap object (or maybe dispatch) how far we got.
  $phase = drush_get_context('DRUSH_BOOTSTRAP_PHASE');
  if (drush_get_context('DRUSH_BOOTSTRAPPING')) {
    switch ($phase) {

  if (drush_get_context('DRUSH_BACKEND', FALSE)) {
  elseif (drush_get_context('DRUSH_QUIET', FALSE)) {
    // If we are in pipe mode, emit the compact representation of the command, if available.
    if (drush_get_context('DRUSH_PIPE')) {

  // This way drush_return_status() will always be the last shutdown function (unless other shutdown functions register shutdown functions...)
  // and won't prevent other registered shutdown functions (IE from numerous cron methods) from running by calling exit() before they get a chance.