diff --git a/src/filepaths/__init__.py b/src/filepaths/__init__.py index 2870f859..a929518d 100644 --- a/src/filepaths/__init__.py +++ b/src/filepaths/__init__.py @@ -36,3 +36,5 @@ onboarding_mark_file = home + 'onboarding-completed' log_file = home + 'onionr.log' ephemeral_services_file = home + 'ephemeral-services.list' + +restarting_indicator = home + "is-restarting" diff --git a/src/onionrcommands/daemonlaunch/__init__.py b/src/onionrcommands/daemonlaunch/__init__.py index f8826f18..96d7954d 100755 --- a/src/onionrcommands/daemonlaunch/__init__.py +++ b/src/onionrcommands/daemonlaunch/__init__.py @@ -214,6 +214,13 @@ def start(override: bool = False): Error exit if there is and its not overridden """ if os.path.exists(filepaths.lock_file) and not override: + if os.path.exists(filepaths.restarting_indicator): + try: + os.remove(filepaths.restarting_indicator) + except FileNotFoundError: + pass + else: + return logger.fatal('Cannot start. Daemon is already running,' + ' or it did not exit cleanly.\n' + ' (if you are sure that there is not a daemon running,' diff --git a/src/onionrcommands/restartonionr.py b/src/onionrcommands/restartonionr.py index e006a758..616f8108 100644 --- a/src/onionrcommands/restartonionr.py +++ b/src/onionrcommands/restartonionr.py @@ -49,7 +49,8 @@ def restart(): return except (AttributeError, OSError): logger.warn('Could not fork on restart') - + with open(filepaths.restarting_indicator, 'w') as f: + f.write('t') daemonlaunch.kill_daemon() while localcommand.local_command('ping', maxWait=8) == 'pong!': time.sleep(0.3)