2

У меня есть скрипт оболочки следующим образом

ss.sh

#!/bin/bash
opFile="custom.data"
sourceFile="TestOutput"
./fc app test > $sourceFile
grep -oP '[0-9.]+(?=%)|[0-9.]+(?=[A-Z]+ of)' "$sourceFile" | tr '\n' ',' > $opFile
sed -i 's/,$//' $opFile

Требование заключается в том, что мне нужно использовать этот скрипт с командой watch. И я хотел бы превратить это в сервис systemctl. Я сделал это так.

sc.sh

#!/bin/bash
watch -n 60 /root/ss.sh

И в моем /etc /systemd /system,

log_info.service

[Unit]

Description="Test Desc"
After=network.target

[Service]
ExecStart=/root/sc.sh
Type=simple

[Install]
WantedBy=default.target

Когда я запускаю systemctl, запускаю log_info.service, он работает, но не постоянно, как мне бы хотелось.

При запуске sytemctl статус log_info.service,

info_log.service - "Test Desc"
   Loaded: loaded (/etc/systemd/system/info_log.service; disabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Mon 2016-09-12 08:17:02 UTC; 2min 18s ago
  Process: 35555 ExecStart=/root/sc.sh (code=exited, status=1/FAILURE)
 Main PID: 35555 (code=exited, status=1/FAILURE)

Sep 12 08:17:02 mo-b428aa6b4 systemd[1]: Started "Test Desc".
Sep 12 08:17:02 mo-b428aa6b4 sc.sh[35654]: Error opening terminal: unknown.
Sep 12 08:17:02 mo-b428aa6b4 systemd[1]: info_log.service: Main process exited, code=exited, status=1/FAILURE
Sep 12 08:17:02 mo-b428aa6b4 systemd[1]: info_log.service: Unit entered failed state.
Sep 12 08:17:02 mo-b428aa6b4 systemd[1]: info_log.service: Failed with result 'exit-code'.

Любые идеи относительно того, почему это не работает правильно? Любая помощь будет оценена!

1 ответ1

2

Как показывает сообщение об ошибке, watch могут использоваться только с терминала:

Error opening terminal: unknown

Но ваше требование, скорее всего , не в том, чтобы использовать скрипт с watch . Ваше требование - запускать его каждые 60 секунд, а watch - это инструмент, который вы выбрали.

Наиболее распространенным методом запуска скрипта каждые 60 секунд является cron - например, * * * * * cronjob будет запускаться каждую минуту. С systemd .services вы можете использовать модуль .timer для той же цели:

# foo.timer
[Unit]
Description=Do whatever

[Timer]
OnActiveSec=60
OnUnitActiveSec=60

[Install]
WantedBy=timers.target

Затем вместо запуска .service вместо этого запускается .timer, и он периодически пытается запустить .service самостоятельно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .