У меня есть машина с Windows 2012 r2 с запланированным рубиновым процессом, который запускается каждую минуту - иногда завершается через несколько секунд, а иногда - около 5 минут.
То, что я пытаюсь достичь, - это иметь возможность выключить машину, ожидая завершения процесса (если он запущен) перед фактически отключение. Завершение работы необходимо инициировать извне (например, через вызов API AWS).
Есть ли способ сделать это?
Я пробовал несколько разных вещей, но безрезультатно:
Signal.trap(...)
внутри кода ruby - кажется, что процессу не посылается никакого сигналаWait-Process
- в этом случае я считать что процесс ruby завершается до выполнения сценария выключения.Я также вижу, что программы Windows могут подключаться к определенным событиям Windows (например: CTRL_SHUTDOWN_EVENT
) и возвращают значения, чтобы сказать, продолжать ли завершение работы, но я немного не понимаю, как можно подключиться к этому в процессе ruby. Возможно, его можно обернуть в какую-нибудь программу для Windows, чтобы это разрешить?
Вы используете неправильный механизм Windows для того, чего хотите достичь. Я бы переписал процесс ruby как службы Windows, чтобы Windows сообщала службе о завершении работы.
В качестве альтернативы вы можете запланировать дополнительную задачу «При выключении», которая останавливает выполняющуюся задачу Ruby и выполняет некоторый чистый выход, как вы бы написали в своей задаче Ruby.