Con respecto a la primera parte de su pregunta " ¿Hay alguna forma de salir del reloj limpiamente? ", sí, puede detener un proceso enviando una señal.
Primero necesita averiguar el ID de proceso (PID )de su ejecuciónwatch
. Puede hacerlo por su nombre:
pidof watch
o por usuario y Cómo ver el proceso creado por un usuario específico en Unix/linux
ps -u ${USER} | grep -i watch | cut -d " " -f 1
y luego detener watch
enviando una señal como
kill -IT ${PID}
kill -INT $(pidof watch)
La segunda parte de su pregunta es más sobre el manejo de señales .
Немного покопавшись, я нашел способ сделать это. Вот мой юнит-файл
[Unit]
Description=Custom Unit File Automation
After=default.target
DefaultDependencies=no
Before=shutdown.target
[Service]
User=veeru
Type=oneshot
RemainAfterExit=no
ExecStart=/bin/bash -c "<command> <args>"
StandardOutput=file:/var/log/command_out.log
StandardError=file:/var/log/command_err.log
ExecStartPost=/usr/bin/sudo /usr/bin/systemctl disable /etc/systemd/system/dummy.service
ExecStop=/usr/bin/sudo /usr/sbin/reboot
[Install]
WantedBy=default.target
Из службы systemd "oneshot" для запуска отключения питания я добавил DefaultDependencies=no
и Before=shutdown.target
, немного лучший способ остановить демон перед перезагрузкой
Это решение кажется немного хакерским. Мне трудно понять, зачем вам нужна одноразовая служба, которая вызывает перезагрузку, почему бы просто не использовать скрипт?
В любом случае, если вы действительно хотите сделать это как единицу systemd, вы можете просто сделать так, чтобы ваншот коснулся файла, а затем иметь условное выражение, которое проверяет файл.
Например,:
[Unit]
ConditionPathExists=/var/Custom_command.data