我有一个如下的 shell 脚本
ss存档
#!/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 服务。我这样做了。
上海
#!/bin/bash
watch -n 60 /root/ss.sh
在我的/etc/systemd/system中,
日志信息服务
[Unit]
Description="Test Desc"
After=network.target
[Service]
ExecStart=/root/sc.sh
Type=simple
[Install]
WantedBy=default.target
当我运行 systemctl start log_info.service 时,它会运行,但不是按照我希望的方式连续运行。
运行 sytemctl status 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
正如错误消息所示,watch
只能从终端使用:
Error opening terminal: unknown
但你的要求很可能不是使用脚本watch
。您的要求是每 60 秒运行一次,并且watch
是您最终选择的工具。
每 60 秒运行一次脚本的最常见方法是计划任务– 例如,* * * * *
cronjob 将每分钟运行一次。使用 systemd .services,您可以使用 .timer 单元实现相同目的:
# foo.timer
[Unit]
Description=Do whatever
[Timer]
OnActiveSec=60
OnUnitActiveSec=60
[Install]
WantedBy=timers.target
然后,您不再启动 .service,而是启动 .timer,它会定期尝试自行启动 .service。