【问题标题】:Create an 'at' job in a script在脚本中创建“at”作业
【发布时间】:2014-10-14 14:57:03
【问题描述】:

在 Ruby 中,我需要有一个脚本将一些 at 作业排队。进行系统调用很容易,我可以使用反引号、system%x()。但是at 命令必须是多行的,并且需要命令输入ctrl+d 来终止。如何动态创建at 作业?

示例(红宝石):

`at #{time}\nrun_other_script.rb\n:q`

效果:

at 2014-10-14 11:30
at> run_other_script.rb
at> <EOT>

当然,我的例子是行不通的。有什么作用?

【问题讨论】:

    标签: ruby dynamic system cron-task


    【解决方案1】:

    at 接受来自标准输入的输入。

    使用IO::popenw 模式,您可以将输入发送到子进程:

    IO.popen("at #{time}", "w") { |f|
      f.puts "run_other_script.rb"
    }
    

    您也可以使用open3 模块。

    【讨论】:

    • 我是否需要发送一个专门的取消命令,还是假设它位于popen 块的末尾?
    • @DevonParsons,你是说 EOF 吗?你不需要这样做。如果你想明确,你可以打电话给f.close
    • 一旦块退出,EOF 将自动发送,因为 Ruby 将关闭与子节点的连接,但是,正如 @falsetru 所说,使用 f.close 也会这样做,这使得更明显的是正在发生。您可以依赖内置行为,也可以更明确但多余。
    猜你喜欢
    • 1970-01-01
    • 2016-12-25
    • 2015-11-02
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多