Могу ли я время от времени планировать запуск сценария внутри определенного процесса оболочки?

Поскольку ваш служебный файл находится в / usr / lib / systemd / user , он рассматривается как пользовательский сервис и запускается вашим собственным экземпляром systemd (запускается как systemd --user ). Это означает, среди прочего, что процесс запускается под вашим пользователем, а не под root , и запускается для каждого пользователя, который входит в систему. На основе ссылки на файл конфигурации в / etc , я бы предположил, что только один экземпляр этого процесса должен работать в любой момент времени, и что он должен работать как root (или какой-либо другой системный аккаунт). Если этот процесс должен запускаться как root , переместите этот файл в / usr / lib / systemd / system (или еще лучше, / etc / systemd / system , поскольку это ваш собственный служебный файл) и игнорируйте остальную часть этого ответа.

Если ваш служебный файл должен запускаться под вашим собственным пользователем, обратите внимание, что в пользовательском режиме доступны только следующие цели:

   When systemd runs as a user instance, the following special units are available, which have
   similar definitions as their system counterparts: default.target, shutdown.target,
   sockets.target, timers.target, paths.target, bluetooth.target, printer.target,
   smartcard.target, sound.target.

Ни multi-user.target , ни сеть. target доступны, поэтому ваша служба не запускается автоматически. Если вы хотите, чтобы он запускался, измените multi-user.target на default.target и удалите After = network.target . Затем запустите systemctl --user enable arkos-redis.service .

2
30.10.2018, 19:28
2 ответа

Не совсем уверен, что вам нужно, но вы можете запустить фоновое задание, которое что-то делает, а затем ждет X секунд, прежде чем повторить.

Пример

( while : ; do echo hello ; sleep 10 ; done ) &
2
27.01.2020, 21:58

Вы можете использовать команду date для динамической настройки продолжительности операции сна.

Пример

now() { date '+%s'; }
next() { date -d $(date -d "1 hours" '+%H:00:00') '+%s'; }

( while : ; do echo "Your Tasks Here" ; sleep $(next) - $(now) ; done ) $ 

Внутренний формат даты следующей функции ()структурирован для запуска в час. Если вы хотите, чтобы он запускался каждые пятнадцать минут, вы можете настроить его следующим образом.

next() { date -d $(date -d "15 minutes" '+%H:%M:00') '+%s'; }

См. также:Команда даты Linux, поиск секунд до следующего часа

Примечание. :Уничтожение приведенного выше сценария немного раздражает из-за того, что в фоновом режиме выполняется операция сна. Уничтожьте с помощью PID или не думайте, что -не заземлит работу шлейфа.

2
27.01.2020, 21:58

Теги

Похожие вопросы