我有一个shell脚本,它使用sql查询生成的数据创建一个文本文件。当我手动运行它时,它运行得很好,但是当作业被添加到crontab时,它会失败,因为它无法从数据库中的表中获取少量必需参数。使用crontab计划作业时会发生什么变化?
[编辑]
该脚本使用以下函数来执行作为参数传递的sql查询。当我手动运行它时,传递的sql查询返回所需的值,以便脚本成功运行。但是当它通过crontab运行时,sql查询没有返回数据,因此脚本异常退出,说明缺少必需的参数。
try_sql_spool() {
(
sqlplus -SILENT /NOLOG @/dev/stdin << EndOfSQL
WHENEVER OSERROR EXIT FAILURE
WHENEVER SQLERROR EXIT FAILURE
CONNECT $USER/$PWD@$SID
SET SERVEROUTPUT OFF;
SET TERMOUT OFF
SET TRIMSPOOL ON
SET PAGESIZE 0
SET LINESIZE 32767
SET FEEDBACK OFF
SET VERIFY OFF
SET TAB OFF
SPOOL /dev/stderr
$1
SPOOL OFF
EndOfSQL
) #3<&1 1<&2 2<&3 3<&-
}
提前致谢。
答案 0 :(得分:0)
回答自己的问题:
脚本在添加到crontab时正在中止,因为用户已切换且无法假脱机/dev/stderr
,因为新用户没有/dev/stderr
的写入权限。所以有O/S Message: Permission denied
错误。所以它无法从数据库中获取所需的数据。
感谢大家的回复。