async def letsencrypt_fork(self, instance: Domain): domain: str = instance.domain command = [ 'letsencrypt', 'certonly', f'--cert-name "{domain}"', '--manual', # f'--manual-auth-hook {self.dns_acme_auth}', f'--manual-auth-hook ./dns_acme_auth.py', # f'--deploy-hook {self.dns_acme_deploy}', f'--deploy-hook ./dns_acme_deploy.py', '--force-renewal', '--preferred-challenges=dns', '--register-unsafely-without-email', '--manual-public-ip-logging-ok', '--server https://acme-v02.api.letsencrypt.org/directory', '--agree-tos', '--quiet', f'-d "{domain}"', f'-d "*.{domain}"', ] shell_command = " ".join(command) process = await asyncio.create_subprocess_shell( shell_command, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE) # if success process.returncode = 0 # if error process.returncode = 1 stdout, stderr = await process.communicate() instance: Domain = self.store.get_cache(domain) instance.on_success = stdout.decode().replace("\n", " ").strip() instance.on_error = stderr.decode().replace("\n", " ").strip() logger.debug( f"process.communicate: {process.returncode} {instance.serialize()}" ) if process.returncode == 0: instance.status = SUCCESS else: instance.status = FAILED self.store.set_cache(domain, instance, instance.cache_time_out)