diff --git a/src/QBar/Blocks/Script.hs b/src/QBar/Blocks/Script.hs
index 0f2f6612b39610723965bfff0638b3aecfe5a080..9f8811f032f79ad50b59e57179efd899ba4acbb7 100644
--- a/src/QBar/Blocks/Script.hs
+++ b/src/QBar/Blocks/Script.hs
@@ -7,6 +7,7 @@ import QBar.TagParser
 import QBar.Time
 
 import Control.Exception (IOException)
+import Control.Concurrent.MVar (newEmptyMVar, putMVar, takeMVar)
 import Data.Aeson (encode)
 import qualified Data.ByteString.Lazy.Char8 as C8
 import qualified Data.Text.Lazy as T
@@ -44,7 +45,12 @@ scriptBlock clickEvents path = catchP startScriptProcess (handleError Nothing)
   where
     handleError :: Maybe ExitCode -> IOException -> Block
     handleError exitCode exc = case result of
-      Left msg -> forever $ pushBlockUpdate $ mkErrorOutput msg
+      Left msg -> do
+        signal <- liftIO newEmptyMVar
+        pushBlockUpdate' (const $ liftIO $ putMVar signal ()) $
+              mkErrorOutput msg
+        liftIO $ takeMVar signal
+        startScriptProcess
       Right x  -> x
       where
         result = case (isEOFError exc, exitCode) of