当我输入“可用模块”时,它会给出可用模块的信息。
--------------------------------- /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
在第一个时间说明符字段中)。