I see your concern... but let's discuss specific dangers you have in mind here?  ```getNextUnbanTime``` you have seems should deal fine "while running", I guess you would need to close pipe ends upon switching to sleepTime > 0 and open it up again for <=0 (in setSleepTime?), adjust the main loop to not even ask getNextUnban for sleep > 0 (i.e. to have it identical to prev operation mode)

my concern is primarily that although all the systems people use Fail2Ban probably support pipes, I fear that actual behavior might "vary" to say the least and if we use "pipe" mechanism all the time, there could be hard(er)-to-troubleshoot breakages without a way to get back to previous way of functioning.