首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连续调度后台任务

连续调度后台任务
EN

Unix & Linux用户
提问于 2013-01-10 20:20:51
回答 1查看 1.7K关注 0票数 2

我有三个SAS程序要在后台运行一个周末。这三个程序将信息输出到同名的文件中,所以我需要在第一个程序完成后、第二个程序开始之前、第二个程序完成之后和第三个程序开始之前删除这些输出文件。显然,解决这个问题的最简单的方法是修改每个程序,使输出文件名不同,但这无助于我学习如何使用Unix。这就是我到目前为止所得到的:

代码语言:javascript
复制
# Begin by running the first SAS program in the background.
sas program1.sas & | at 5:00 PM JAN 11

# I'd like to wait until the first program finishes to remove
# the output files and run the second program.
wait ???
rm file1.sas7bdat file2.sas7bdat file3.sas7bdat file4.sas7bdat file5.sas7bdat
sas program2.sas & | at 5:00 PM JAN 12

# And now I repeat.
wait ???
rm file1.sas7bdat file2.sas7bdat file3.sas7bdat file4.sas7bdat file5.sas7bdat
sas program3.sas & | at 5:00 PM JAN 13

我将每个程序设置为连续几天在同一时间运行,原因有两个:(1)我知道以前的程序将在24小时内完成;(2)我假设服务器上的负载在连续的几天内是相同的。理想情况下,我可以以某种方式获取第一个程序的进程ID,并将其传递给第一个wait命令,类似于第二个程序和wait命令。有什么想法吗?

编辑

与这种特定情况相比,我更感兴趣的是确定进程ID并将其传递给wait命令的通用解决方案。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2013-01-10 21:08:12

问题是你用at来做一些不应该用来做的事情,真的。你也有两个相互冲突的目标:“在程序1之后运行程序2”和“在1月12日下午5点运行程序2”。

问题的一个部分很容易解决: at允许多个命令。因此,不只是使用at来调度sas脚本,您还可以将rm放在作业中。

代码语言:javascript
复制
at 5:00 PM JAN 11 <<EOJ
sas program1.sas
rm file1.sas7bdat file2.sas7bdat file3.sas7bdat file4.sas7bdat file5.sas7bdat
EOJ

&没有理由出现在sas行中;at总是“在后台”运行作业。

接下来,您必须弄清楚如何解决前面提到的冲突。特别是,如果1月11日的工作在24小时后还没有完成(在1月12日下午5点之前)。要做到这一点,有几种方法:

  • 这不是真正的1月12日的工作。它应该在program1.sas完成后立即运行。在这种情况下,只需将其作为上面第一项工作的一部分,就像rm一样。
  • 这种事永远不会发生。如果是的话,你会手动修复它。在这种情况下,只需按照上面的计划就可以了。
  • 它需要等待。在这种情况下,您可以在第一个作业结束时安排它,或者使用一个锁文件,或者计算适当的睡眠时间(如果可用的话,可以使用sleepenh来避免自己计算)。
票数 5
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/60929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档