微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我如何确保一个stream程运行,即使它自己被杀死? 那么需要重新启动

我正在使用Linux。 我想每次启动计算机时都要运行一个进程(一个irc bot)。 但是我有一个问题:networking不好,经常断开连接,所以我需要每天手动重启机器人几次。 我如何自动化?

附加信息:僵尸程序创build一个叫做bot.pid的pid文件僵尸程序重新连接自己,但只有几次。 networking太糟糕了,所以机器人有时会因为没有回应而自杀。

我现在做的(又名我的方法;))我有一个cron作业,每5分钟执行一次startbot.rb 。 (脚本本身与bot相同的目录中)

剧本:

修改/设置initramfs脚本中的根设备

Ubuntu的启动菜单

“权限被拒绝”在启动时运行命令

如何使Autohotkey在启动时自动运行?

最好的/简单的方法来build立一个快速启动Linux

#!/usr/bin/ruby require 'fileutils' if File.exists?(File.expand_path('tmp/bot.pid')) @pid = File.read(File.expand_path('tmp/bot.pid')).chomp!.to_i begin raise "ouch" if Process.kill(0,@pid) != 1 rescue puts "Removing abandoned pid file" FileUtils.rm(File.expand_path('tmp/bot.pid')) puts "Starting the bot!" Kernel.exec(File.expand_path('./bot.rb')) else puts "Bot up and running!" end else puts "Starting the bot!" Kernel.exec(File.expand_path('./bot.rb')) end

它会检查pid文件是否存在,如果是,则检查是否kill -s 0 BOT_PID == 1 (如果机器人正在运行),并在两个检查失败/不真实时启动机器人。

我的方法似乎很脏,所以我该怎么做呢?

GRUB阶段1.5的代码在磁盘上的位置和它被加载的地址是什么?

适用于Linux和RandomSource的Oracle Java 8 x64

如何在linux ubuntu启动时启动gui应用程序

将Windows 7 UEFI条目写入NVRAM

我怎样才能在每次启动时运行我自己的脚本

重新启动应用程序是一个糟糕的解决方法,而不是一个解决方案。

我建议查看您的机器人的文档,寻找一个选项来配置多少坏的重试它退出或如何完全禁用此功能。 如果bot是开源的,你也可以查看源代码修改重试代码。 尝试找到一个干净的解决方案。

编辑:现在,如果你的系统使用systemd而不是init,为你的机器人创建一个服务文件/etc/systemd/system/bot.service,像这样:

[Unit] Description=bot service After=network.target [Service] Type=simple Restart=always RestartSec=10 ExecStart=/usr/bin/ruby /path/to/bot.rb [Install] WantedBy=multi-user.target

这将在10秒后重新启动机器人。 还要考虑使用User=指令,以便在不需要root权限的情况下运行,或者使用systemd的用户实例。 有关选项的更多信息,请参阅systemd 文档 。 对于用户systemd服务看到这个问题 , arch linux wiki和官方文档 。

然后用systemctl启动机器人启动(重启后启动机器人)和systemctl启动机器人

或者,我会创建一个循环运行bot的shell脚本。 确保bot.rb不会分叉到后台

#/bin/bash for (( ; ; )) do ./bot.rb done

你可以使用nohup ./startscript.sh &来运行这个脚本,所以如果关闭控制台它不会终止。

一个名为daemontools的工具,用于监督和管理UNIX服务

从这个链接你可以学习和使用它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐