diff --git a/Changelog.md b/Changelog.md
--- a/Changelog.md
+++ b/Changelog.md
@@ -1,3 +1,8 @@
+### 1.7.10
+
+- Added exporter *ngxExportInitHook* which can be used for writing global data
+  *synchronously* before the start of handling client requests.
+
 ### 1.7.9
 
 - Reify types of internal handlers from their signatures.
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,7 +1,7 @@
 The following license covers this documentation, and the source code, except
 where otherwise indicated.
 
-Copyright 2016-2023, Alexey Radkov. All rights reserved.
+Copyright 2016-2024, Alexey Radkov. All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are met:
diff --git a/NgxExport.hs b/NgxExport.hs
--- a/NgxExport.hs
+++ b/NgxExport.hs
@@ -4,7 +4,7 @@
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  NgxExport
--- Copyright   :  (c) Alexey Radkov 2016-2023
+-- Copyright   :  (c) Alexey Radkov 2016-2024
 -- License     :  BSD-style
 --
 -- Maintainer  :  alexey.radkov@gmail.com
@@ -47,6 +47,8 @@
                  ,ngxExportAsyncHandlerOnReqBody
     -- *** Service hooks
                  ,ngxExportServiceHook
+    -- *** Initialization hook
+                 ,ngxExportInitHook
     -- * Accessing Nginx global objects
     -- *** Opaque pointers
                  ,ngxCyclePtr
@@ -223,6 +225,9 @@
 type AsyncHandlerRBImpl =
     Ptr NgxStrType -> Ptr NgxStrType -> CInt -> AsyncHandlerImpl
 
+type InitHookImpl =
+    Ptr CString -> Ptr CInt -> IO CUInt
+
 do
     TyConI (DataD _ _ _ _ tCs _) <- reify ''NgxExport
     TyConI (DataD _ _ _ _ aCs _) <- reify ''NgxExportTypeAmbiguityTag
@@ -251,6 +256,12 @@
         ++
         map (\(c, t) -> tySynD (mkName $ nameBase c) [] $ return t) tCons
 
+fExport :: String -> Name -> Type -> Dec
+fExport = ((ForeignD .) .) . ExportF CCall
+
+fBody :: Q Exp -> [Q Clause]
+fBody b = [clause [] (normalB b) []]
+
 -- Exporter -> Ambiguity -> Handler impl -> Handler name (Function) -> Decls
 type NgxExportDec = Name -> Name -> Name -> Name -> Q [Dec]
 
@@ -263,14 +274,14 @@
 #endif
     sequence
         [sigD nameFt typeFt
-        ,funD nameFt $ body [|exportType $(conE e `appE` modeF)|]
-        ,export ftName nameFt <$> typeFt
+        ,funD nameFt $ fBody [|exportType $(conE e `appE` modeF)|]
+        ,fExport ftName nameFt <$> typeFt
         ,sigD nameFta typeFta
-        ,funD nameFta $ body [|exportTypeAmbiguity $(conE a)|]
-        ,export ftaName nameFta <$> typeFta
+        ,funD nameFta $ fBody [|exportTypeAmbiguity $(conE a)|]
+        ,fExport ftaName nameFta <$> typeFta
         ,sigD nameF $ return typeF
-        ,funD nameF $ body [|$(varE h) $modeF|]
-        ,return $ export fName nameF typeF
+        ,funD nameF $ fBody [|$(varE h) $modeF|]
+        ,return $ fExport fName nameF typeF
         ]
     where modeF   = mode f
           fName   = "ngx_hs_" ++ nameBase f
@@ -281,8 +292,6 @@
           ftaName = "ambiguity_" ++ fName
           nameFta = mkName ftaName
           typeFta = [t|IO CInt|]
-          body b  = [clause [] (normalB b) []]
-          export  = ((ForeignD .) .) . ExportF CCall
 
 ngxExport :: NgxExportDec
 ngxExport = ngxExport' varE
@@ -590,6 +599,39 @@
 ngxExportServiceHook =
     ngxExportC 'IOYY 'IOYYSync 'ioyYWithFree
 
+-- | Exports an action of type
+--
+-- @
+-- 'IO' ()
+-- @
+--
+-- as a synchronous initialization hook.
+--
+-- This can be used to initialize global data /synchronously/ before handling
+-- client requests. Note that asynchronous services that write global data on
+-- the first run cannot guarantee the data has been written before the start of
+-- processing client requests.
+--
+-- It is not possible to load more than one initialization hook. The hook is
+-- only loaded if it has been directly declared in the target library,
+-- initialization hooks found in dependent libraries are ignored.
+--
+-- The hook is not controlled by Nginx directives. If required, data for the
+-- initialization hook can be passed in directive /haskell program_options/ and
+-- handled with 'System.Environment.getArgs' inside it.
+--
+-- @since 1.7.10
+ngxExportInitHook :: Name -> Q [Dec]
+ngxExportInitHook f =
+    sequence
+        [sigD nameF typeF
+        ,funD nameF $ fBody [|initHook $(varE f)|]
+        ,fExport fName nameF <$> typeF
+        ]
+    where fName = "ngx_hsinit_"
+          nameF = mkName fName
+          typeF = [t|InitHookImpl|]
+
 data ServiceHookInterrupt = ServiceHookInterrupt
 
 instance Exception ServiceHookInterrupt
@@ -1031,6 +1073,10 @@
         PtrLen t l <- B.unsafeUseAsCStringLen s return
         pokeCStringLen t l p pl
         return 0
+
+initHook :: IO () -> InitHookImpl
+initHook f p pl =
+    safeHandler p pl $ f >> return 0
 
 foreign export ccall ngxExportInstallSignalHandler :: IO ()
 ngxExportInstallSignalHandler :: IO ()
diff --git a/ngx-export.cabal b/ngx-export.cabal
--- a/ngx-export.cabal
+++ b/ngx-export.cabal
@@ -1,8 +1,8 @@
 name:                       ngx-export
-version:                    1.7.9
-synopsis:                   Helper module for Nginx haskell module
+version:                    1.7.10
+synopsis:                   Helper module for Nginx Haskell module
 description:                Helper module for
-        <https://github.com/lyokha/nginx-haskell-module Nginx haskell module>.
+        <https://github.com/lyokha/nginx-haskell-module Nginx Haskell module>.
 homepage:                   https://github.com/lyokha/nginx-haskell-module
 license:                    BSD3
 license-file:               LICENSE
@@ -10,7 +10,7 @@
 author:                     Alexey Radkov <alexey.radkov@gmail.com>
 maintainer:                 Alexey Radkov <alexey.radkov@gmail.com>
 stability:                  stable
-copyright:                  2016-2023 Alexey Radkov
+copyright:                  2016-2024 Alexey Radkov
 category:                   Network
 build-type:                 Simple
 cabal-version:              1.20
