【问题标题】:Unix : Run a script on a different machine at a particular timeUnix:在特定时间在另一台机器上运行脚本
【发布时间】:2012-01-02 13:17:58
【问题描述】:

我正在编写一个脚本,该脚本获取脚本名称和运行该脚本的时间,并从配置文件中登录/主机名。

拥有 cron、at 和 crontab 权限。

现在有没有其他方法可以实现在输入时间(在可配置文件中设置)从在不同主机上运行的另一个脚本运行脚本的逻辑。

详细说明: 就像 script_A 读取一个配置文件,它从中获取三个输入 script_B ,运行时间 (ddmmyyyy h24:mm:ss),login1@machine1。此 script_B 必须在给定主机上提供的时间运行。

所有连接的机器都没有 cron,crontab,at 权限

我正在使用solaris

我们可以在 unix 中使用类似的东西,即 script_A 创建一个 script_c,其中 script_B 具有检查时间参数。现在这个 script_c 被复制到远程机器,它一直在后台运行,直到达到提供的时间。一旦时间到了,它执行 script_b(位于配置文件中的远程主机)并退出。

谢谢。

【问题讨论】:

  • 如果你没有 crontab 的权限,那么系统管理员和/或机器的所有者可能不允许这样做,你不应该反对:在某些国家(例如在法国) 非法访问或滥用计算机是刑事犯罪。所以你应该与人交谈,而不是试图规避他们定义的规则。

标签: linux bash shell unix solaris


【解决方案1】:

如果你想在主机上的纪元时间 xxxxxxxxxx 执行命令 foo,你可以这样做:

$延迟=$((xxxxxxxxxx-$(日期+%s)));测试 $delay -gt 0 && 睡眠 $delay && ssh 主机 foo

【讨论】:

  • 我的初始脚本 (script_A) 会发生什么,它会在那里等到这个 script_B 没有被执行或者这个命令将在主机上创建一个 pid 并在实例化时运行。
  • 如上所述,这将暂停,直到时间到期。您可以简单地生成一个执行暂停的后台进程。这是一个非常简单的解决方案,无法很好地扩展。
【解决方案2】:

最简单的方法是从源代码编译cron并部署到目标机器上。每次您的代码对机器进行任何形式的控制时,请检查您的 cron 守护程序是否正在运行(经典 PID 文件)并在必要时启动它。

不过是一个警告:

这是一个社会问题和技术解决方案。你的里程会很低。

【讨论】:

  • 要部署crond,发帖者可能需要对目标机器的root 访问权限。 (而且 Thiton 的警告非常重要,所以我把它命名为粗体)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-14
  • 2020-10-24
  • 1970-01-01
  • 1970-01-01
  • 2017-04-29
  • 1970-01-01
相关资源
最近更新 更多