diff -Nuar a/vendor/magento/module-sitemap/Model/Observer.php b/vendor/magento/module-sitemap/Model/Observer.php
--- a/vendor/magento/module-sitemap/Model/Observer.php
+++ b/vendor/magento/module-sitemap/Model/Observer.php
@@ -5,6 +5,9 @@
  */
 namespace Magento\Sitemap\Model;

+use Magento\Framework\App\ObjectManager;
+use Psr\Log\LoggerInterface;
+
 /**
  * Sitemap module observer
  *
@@ -66,25 +69,38 @@ class Observer
      */
     protected $inlineTranslation;

+    /**
+     * @var int
+     */
+    private $retryInterval = 10;
+
+    /**
+     * @var LoggerInterface
+     */
+    private $logger;
+
     /**
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Sitemap\Model\ResourceModel\Sitemap\CollectionFactory $collectionFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Mail\Template\TransportBuilder $transportBuilder
      * @param \Magento\Framework\Translate\Inline\StateInterface $inlineTranslation
+     * @param LoggerInterface|null $logger
      */
     public function __construct(
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Sitemap\Model\ResourceModel\Sitemap\CollectionFactory $collectionFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Mail\Template\TransportBuilder $transportBuilder,
-        \Magento\Framework\Translate\Inline\StateInterface $inlineTranslation
+        \Magento\Framework\Translate\Inline\StateInterface $inlineTranslation,
+        LoggerInterface $logger = null
     ) {
         $this->_scopeConfig = $scopeConfig;
         $this->_collectionFactory = $collectionFactory;
         $this->_storeManager = $storeManager;
         $this->_transportBuilder = $transportBuilder;
         $this->inlineTranslation = $inlineTranslation;
+        $this->logger = $logger ?: ObjectManager::getInstance()->get(LoggerInterface::class);
     }

     /**
@@ -97,6 +113,7 @@ class Observer
     public function scheduledGenerateSitemaps()
     {
         $errors = [];
+        $sitemapsWithError = [];

         // check if scheduled generation enabled
         if (!$this->_scopeConfig->isSetFlag(
@@ -114,6 +131,7 @@ class Observer
             try {
                 $sitemap->generateXml();
             } catch (\Exception $e) {
+                $sitemapsWithError[] = $sitemap;
                 $errors[] = $e->getMessage();
             }
         }
@@ -123,35 +141,56 @@ class Observer
             \Magento\Store\Model\ScopeInterface::SCOPE_STORE
         )
         ) {
-            $this->inlineTranslation->suspend();
-
-            $this->_transportBuilder->setTemplateIdentifier(
-                $this->_scopeConfig->getValue(
-                    self::XML_PATH_ERROR_TEMPLATE,
-                    \Magento\Store\Model\ScopeInterface::SCOPE_STORE
-                )
-            )->setTemplateOptions(
-                [
-                    'area' => \Magento\Backend\App\Area\FrontNameResolver::AREA_CODE,
-                    'store' => \Magento\Store\Model\Store::DEFAULT_STORE_ID,
-                ]
-            )->setTemplateVars(
-                ['warnings' => join("\n", $errors)]
-            )->setFrom(
-                $this->_scopeConfig->getValue(
-                    self::XML_PATH_ERROR_IDENTITY,
-                    \Magento\Store\Model\ScopeInterface::SCOPE_STORE
-                )
-            )->addTo(
-                $this->_scopeConfig->getValue(
-                    self::XML_PATH_ERROR_RECIPIENT,
-                    \Magento\Store\Model\ScopeInterface::SCOPE_STORE
-                )
-            );
-            $transport = $this->_transportBuilder->getTransport();
-            $transport->sendMessage();
-
-            $this->inlineTranslation->resume();
+            sleep($this->retryInterval);
+            $message = 'Sitemap generation errors occurred: ';
+            $message .= join(';', $errors);
+            $this->logger->debug($message);
+            $this->logger->debug('Sitemap generation retry attempt');
+            $nonRecoverableErrors = [];
+            //re-try to write sitemap again
+            foreach ($sitemapsWithError as $sitemap) {
+                try {
+                    $sitemap->generateXml();
+                } catch (\Exception $e) {
+                    $nonRecoverableErrors[] = $e->getMessage();
+                }
+            }
+
+            if (!empty($nonRecoverableErrors)) {
+                $this->inlineTranslation->suspend();
+
+                $this->_transportBuilder->setTemplateIdentifier(
+                    $this->_scopeConfig->getValue(
+                        self::XML_PATH_ERROR_TEMPLATE,
+                        \Magento\Store\Model\ScopeInterface::SCOPE_STORE
+                    )
+                )->setTemplateOptions(
+                    [
+                        'area' => \Magento\Backend\App\Area\FrontNameResolver::AREA_CODE,
+                        'store' => \Magento\Store\Model\Store::DEFAULT_STORE_ID,
+                    ]
+                )->setTemplateVars(
+                    ['warnings' => join("\n", $nonRecoverableErrors)]
+                )->setFrom(
+                    $this->_scopeConfig->getValue(
+                        self::XML_PATH_ERROR_IDENTITY,
+                        \Magento\Store\Model\ScopeInterface::SCOPE_STORE
+                    )
+                )->addTo(
+                    $this->_scopeConfig->getValue(
+                        self::XML_PATH_ERROR_RECIPIENT,
+                        \Magento\Store\Model\ScopeInterface::SCOPE_STORE
+                    )
+                );
+                $transport = $this->_transportBuilder->getTransport();
+                $transport->sendMessage();
+
+                $this->inlineTranslation->resume();
+
+                $message = 'Sitemap generation non-recoverable errors occurred: ';
+                $message .= join(';', $nonRecoverableErrors);
+                $this->logger->debug($message);
+            }
         }
     }
 }
