bash - 无法创建目录'/home//.ssh'。从 oracle 作业运行时
问题描述
我有一个简单的文件传输 bash 脚本。当此脚本直接从 solaris 数据库服务器运行时,它成功执行并将文件传输到远程服务器。但是,当同一脚本通过 Oracle 作业运行时,它会失败并显示以下错误消息。
我在 all_scheduler_job_run_details 表的输出列中找到此消息。
"Could not create directory '/home/user/.ssh'. Host key verification failed. Couldn't read packet: Connection reset by peer"
但是 /home/user/.ssh 已经存在,并且与远程服务器的连接没有密码。
v_local_dir=/u12/dw/temp v_file_name=devcode_test_file v_remote_dir=upload v_usr=devcode v_server=sftp1.umbrella.com v_port=2222 v_cmd="cd ${v_remote_dir} put ${v_local_dir}/${v_file_name}" echo "Executing sftp command" echo "Command is ${v_cmd}" echo "${v_cmd}" | sftp -oPort=${v_port} ${v_usr}@${v_server}
Oracle 创建程序代码
dbms_scheduler.create_program
(
program_name=>'USER.PROG_DEVCODE',
program_action=> '/u12/dw/sftp_to_remote.sh',
program_type=>'EXECUTABLE',
number_of_arguments=>1,
comments => 'push files',
enabled=>FALSE
) ;
dbms_scheduler.enable 'DW_USER_REPORT.PROG_PUSH_FILE_TO_DEVCODE');
Oracle 创建工作计划
declare
p_job_name varchar2(500) := 'USER.JOB_PROG_DEVCODE';
p_command varchar2(500) := 'PROG_DEVCODE';
-- p_args := ''
p_type varchar2(500) := 'PROGRAM';
p_wait_result number := 1;
begin
DBMS_SCHEDULER.CREATE_JOB (
p_job_name -- IN VARCHAR2,
, p_command --program_name IN VARCHAR2,
, start_date => NULL
, repeat_interval =>
, end_date => NULL
, job_class => 'DEFAULT_JOB_CLASS'
, enabled => FALSE
, auto_drop => TRUE
, comments => NULL
, job_style => 'REGULAR'
);
DBMS_SCHEDULER.set_attribute(
p_job_name
, 'credential_name'
, 'USER.ORACLE_OS_CREDENTIAL'
);
DBMS_SCHEDULER.enable(
p_job_name
);
end;
解决方案
推荐阅读
- java - 是否可以将 JMH 与 JDK 17 一起使用?
- javascript - 如何查找对象数组是否包含javascript中的元素?如果包含,如何访问它?
- visual-studio-code - 如何从 vscode 扩展 API 中的 html 标签获取类字符串
- javascript - 如何在范围外使用套接字?
- java - 运行此 Spring Batch 应用程序时发生“HikariDataSource 已关闭”异常,为什么?怎么修?
- javascript - 限制 Google 自定义搜索中的广告数量
- reactjs - 反应原生:命令失败:./gradlew app:installDebug
- c# - 如何在 GET-Method 中排除 JSON 中的一些模型字段?
- python - Python列表排序与仿真优化问题
- msbuild - 进行 WebDeploy 时不要删除 web.config