我有一个cron作业,它每X分钟运行一次,并且应该重新启动amazon-ssm-agent服务。然而,我注意到我的ruby脚本实际上从来没有做到这一点。
下面是我的crontab的样子:
* * * * * /root/./my_script.rb下面是ruby脚本中非常简单的内容:
#!/usr/bin/env ruby
#
command = "service amazon-ssm-agent stop"
system(command)如果我在监控/var/log/amazon/ssm/amazon-ssm-agent.log,它永远不会停止。如果我用service amazon-ssm-agent status查看该服务,它仍然显示为在线。
从Cron作业调用的ruby脚本中停止或重新启动服务的最佳方式是什么?我今天面临着一个相当大的问题,我想这就是原因。
我尝试捕获结果并将其写到一个文件中,但是当cron作业运行时,文件被创建,但它是空的。下面是ruby脚本现在的样子:
#!/usr/bin/env ruby
command = "service amazon-ssm-agent stop"
result = system(command)
File.open("/root/result.txt", "w") {|f| f.write(result)}我还尝试将脚本修改为:
#!/usr/bin/env ruby
command = "service amazon-ssm-agent stop"但还是不走运。我甚至修改了我的cron作业本身来启动服务,而不是调用启动服务的ruby脚本,但没有运气:
* * * * * service amazon-ssm-agent start服务永远不会启动。
发布于 2020-12-11 00:29:03
弄清楚了问题,这是愚蠢的。我意识到service命令并不驻留在cron作业所具有的环境路径中,所以这就是它从不工作的原因。ifconfig也不是,这也是我想要测试的。
因此,我不得不将Ruby脚本中的service命令替换为/usr/sbin/service,之后它就可以完美地工作了。
https://stackoverflow.com/questions/65228804
复制相似问题