如何在 crontab 中使用模块

如何在 crontab 中使用模块

当我输入“可用模块”时,它会给出可用模块的信息。

--------------------------------- /tool/applic/module-3.2.10/Modules/3.2.10/modulefiles ----------------------------
Applic/Abaqus_2016_sp1       Applic/FDTD-8.15.716-1       Applic/Raphael_2006.12-SP2   Applic/Synopsys_sx_C2009-sp1

我想每 1 分钟保存一次此信息。通过使用定时任务

所以我“crontab -e”并像这样编辑

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
*/1 * * * * module add something
*/1 * * * * module list >> croninfo.txt     
*/1 * * * * module available >> croninfo.txt

croninfo.txt是空的。看起来“模块”不起作用。

我怎样才能使模块工作以便我可以添加模块。

答案1

这里有两种明显的可能性。

首先,您必须记住,cron运行其命令的环境通常与从登录会话启动的交互式 shell 中获得的环境截然不同。您似乎已经通过添加作业来解决这个问题PATH,但记住这一点很重要。作为对此的补充,cron 运行命令,当前工作目录设置为所有者用户的主目录,所以如果这不是您想要的,您必须进行相应调整。

其次,具有相同时间说明符的命令以不确定的顺序执行。当你写的时候

*/1 * * * * module add something
*/1 * * * * module list >> croninfo.txt
*/1 * * * * module available >> croninfo.txt

你可能认为它们会按顺序执行,一个接一个,但事实上,cron 可以随意按照它一时喜欢的顺序执行它们。根据每个命令启动和执行所需的时间,完全有可能同时执行多个不同的命令。

如果你想顺序执行一组命令,通常,最好的方法是制作一个简单的脚本,以正确的顺序运行命令,并且仅从 cron 中执行该脚本。

这样做还可以让您使用类似的方法#!/bin/bash -x来获取有关脚本执行的更多详细信息,这可以帮助查明问题。

顺便说一句,您不需要/1说明符;*并且*/1在任何理智的 cron 实现上都是等效的。当您想要成为 1 以外的值时,说明符/n会更有用;n例如,每三分钟执行一个命令(*/3在第一个时间说明符字段中)。

相关内容