我在我的~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不能调用另一个脚本。我怀疑问题是与路径变量或其他类似的东西,但不知道我应该如何解决这个问题。
谢谢!
编辑: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
endif
这可能是$PATH
的问题。关于cron用于运行作业的环境,请参阅crontab(5)
。最简单的解决方案之一是调整crontab条目以提供脚本的完整路径:
59 * * * * /home/sdcme/bin/script.py &>~concatenation.log
还要检查你的电子邮件。Cron将通过电子邮件将输出和运行作业的任何失败发送给您。如果您的系统上没有邮件服务器,您将需要安装和配置一个,以便您收到此类通知。
p。使用*/59
作为分钟规格不是很有意义,所以我将其改为等效的59
,上面。
首先使用crontab -e要退出编辑器,请使用:xi保存并退出然后从
开始编辑*/59 * * * * script.py &>~concatenation.log
*/59 * * * * /usr/bin/python script.py &>~concatenation.log
/usr/bin/python是python的路径
希望它对你有用