【发布时间】:2015-11-28 03:21:10
【问题描述】:
我在 ~home/ 目录中编写了一个 python script.py,它调用位于 ~home/bin 的其他 python 脚本。 当我运行 script.py 时,我能够成功运行它,但是当我在 crontab 中安排 script.py 时,script.py 无法从 bin 目录调用脚本。
Crontab 脚本如下所示:
*/59 * * * * script.py &>~concatenation.log
script.py 调用另一个脚本如下:
subprocess.call('/home/sdcme/bin/nii_mdir_sdcme %s %s' % (a, a), shell=True)
有人可以指出为什么 script.py 不能调用另一个脚本。我怀疑问题出在 PATH 变量或其他类似的东西上,但不知道我应该如何解决这个问题..
谢谢!
编辑:nii_mdir_sdcme 脚本调用位于同一 bin 目录中的另一个脚本 niidicom_sdcme:Crontab 邮件,显示以下错误邮件 -
niidicom_sdcme: Command not found.
niidicom_sdcme: Command not found.
总结:
cronatab-> script.py -> nii_mdir_sdcme -> niidicom_sdcme 问题是nii_mdir_sdcme 无法调用niidicom_sdcme。 但是当我在命令提示符下独立运行 script.py 时,一切正常..
nii_mdir_sdcme 代码:
#!/bin/tcsh
if ($#argv < 2) then
echo "Usage: nii_mdir_sdcme start_dir# end_dir#"
exit
else
set start = $argv[1]
set end = $argv[2]
if ( ! -d ./medata ) then
sudo mkdir ./medata
endif
sudo chown sdcme ./medata
sudo chgrp users ./medata
set i = $start
while ( $i <= $end )
echo " "
if ( $i < 10 ) then
echo "Entering 000$i..."
cd 000$i
sudo chmod 777 .
niidicom_sdcme run0$i
#mv *+orig.* ../medata
sudo chmod 755 .
else
echo "Entering 00$i..."
cd 00$i
sudo chmod 777 .
niidicom_sdcme run$i
#mv *+orig.* ../medata
sudo chmod 755 .
endif
cd ..
@ i++
end
结束
【问题讨论】:
-
您确定 cron 作业 (script.py) 正在运行吗?您可能需要在 crontab 中包含该命令的完整路径。另外,检查第二个脚本的权限。它是否可执行,运行 cron 作业的用户是否可以访问它?
-
cron 是否为此发送了本地电子邮件?使用
mail或mutt进行检查。 -
@minopret 我用邮件错误编辑了我的问题
-
您确定
niidicom_sdcme没有运行吗?该错误看起来像是由niidicom_sdcme本身打印的,即它找不到run0$i或run$i命令(sh、bash、zsh 在这里产生不同的错误消息)。不相关:&>看起来像bash语法(在 crontab 中明确设置 SHELL),subprocess.call使用/bin/sh如果shell=True(您可以使用executable参数选择其他 shell),您的脚本运行 @987654337 @。确保没有由于 shell 之间的语法差异而导致的错误。 -
@JFSebastian 如果 subporocess.call() 正在调用 sh 脚本,而我的脚本是用 tcsh 编写的,那么包装器 python 脚本 (nii_mdir_sdcme) 在手动运行时应该可以工作。我知道我在重复但我仍然不undertsnding这个问题..