在 Linux 中创建自动重启脚本

在 Linux 中创建自动重启脚本

我的 Linux 机器上有一个小型日志工具,需要每 20-30 分钟重新启动一次,因为日志节点会不时关闭会话。

您将如何创建脚本来使软件以这样的方式重新启动。

启动该工具的命令如下

root@25-3b-1d-46-3f-13:/home/#logdrift -f 10.15.12.10 test.log

当它重新启动时,它需要在 test.log 文件名中添加一个数字,例如 test1.log

答案1

Montecristo 的 cron 命令是每 20 分钟安排一次作业的好方法。不过,正如所写,它将启动“命令”的新实例,而不会终止旧实例。它也不会在“test1.log”中放置记录。

我假设目标程序名为“#logdrift”(前导哈希是合法的,但它存在一些尴尬的转义问题),并且您需要始终运行一个实例。

我不会让 cron 条目直接运行目标进程,而是创建一个简单的包装器脚本并每 20 分钟执行一次。这里,包装器有 3 个职责:

  • 终止目标进程的正在运行的实例
  • 启动目标进程的新实例
  • 在test1.log中做记录

但是,大多数程序都不需要定期重启。与其使用 cron 作业和包装脚本等快速解决方法,不如直接解决根本问题。

答案2

我会用日志旋转为此,您可以设置一个后旋转脚本(使用 postrotate 指令),该脚本由 logrotate 激活以重新启动该程序。传统上,该程序应该接收 SIGHUP 信号以重新打开其日志,但我从未听说过 logdrift。

Logrotate 将使用 cron 调用(您可以使用 cron 每隔 X 分钟、小时、天等运行任何操作)。Logrotate 还将处理增量日志,方法是获取先前的日志并将其设为 log.1,然后设为 log.1 log.2 等等...

如果这个程序是一个守护进程,我会创建一个启动和停止它的初始化脚本。这个文章有一个关于如何在类似 redhat 的系统上执行此操作的示例。请参阅 /etc/init.d/ 中的脚本,获取有关如何停止和启动程序的示例。

答案3

*/20 * * * *  /path/to/your/command

每 20 分钟运行一次。
要更改日志文件的编号,您可以查看其所在的目录并解析其名称,如果它没有编号,则新文件的点前会有一个 1,如果它有编号,则只需向其添加 1。
我个人不喜欢使用范围更广的变量来保存计数的想法。

答案4

如果您有一个调用 logrotate 的启动脚本,那么您可以将其放入 inittab 中,并添加 respawn 指令。这样,每次进程终止时,它都会重新启动。

相关内容