diff --git a/InPlaceUpdate.php b/InPlaceUpdate.php
index 64a3c02..922597e 100644
--- a/InPlaceUpdate.php
+++ b/InPlaceUpdate.php
@@ -63,8 +63,18 @@ class InPlaceUpdate {
       $modified = self::checkModifiedFiles($project_name, $archive);
       if (!$modified && self::backup($archive, $project_root)) {
         watchdog('automatic_updates', 'In place update has started.', [], WATCHDOG_INFO);
-        $success = self::processUpdate($archive, $project_root);
-        watchdog('automatic_updates', 'In place update has finished.', [], WATCHDOG_INFO);
+        try {
+          $success = self::processUpdate($archive, $project_root);
+          watchdog('automatic_updates', 'In place update has finished.', [], WATCHDOG_INFO);
+        }
+        catch (\Throwable $throwable) {
+          watchdog('automatic_updates', 'In place update has failed.', [], WATCHDOG_ERROR);
+          watchdog_exception($throwable);
+        }
+        catch (\Exception $exception) {
+          watchdog('automatic_updates', 'In place update has failed.', [], WATCHDOG_ERROR);
+          watchdog_exception($exception);
+        }
         $result = automatic_updates_exec_command('updatedb:status');
         if (!empty($result['return_code'] || !empty($result['output']))) {
           // Rollback if there are database updates in the update.
