最近在使用azkaban调度shell脚本的时候,遇到了一个错误,错误日志大概如下:
java.lang.RuntimeException: java.io.IOException: Cannot run program "/SqoopScripts/import/usermail/import_t_usermail.sh" (in directory "/azkaban/azkaban-exec-server/executions/1714/d_report_subscribe"): error=13, 权限不够
at azkaban.jobExecutor.ProcessJob.run(ProcessJob.java:304)
at azkaban.execapp.JobRunner.runJob(JobRunner.java:752)
at azkaban.execapp.JobRunner.doRun(JobRunner.java:591)
at azkaban.execapp.JobRunner.run(JobRunner.java:552)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: Cannot run program "/SqoopScripts/import/usermail/import_t_usermail.sh" (in directory "/azkaban/azkaban-exec-server/executions/1714/d_report_subscribe"): error=13, 权限不够
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at azkaban.jobExecutor.utils.process.AzkabanProcess.run(AzkabanProcess.java:89)
at azkaban.jobExecutor.ProcessJob.run(ProcessJob.java:296)
... 8 more
Caused by: java.io.IOException: error=13, 权限不够
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
at java.lang.ProcessImpl.start(ProcessImpl.java:134)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
... 10 more
21-01-2021 02:26:03 CST import_t_usermail ERROR - java.io.IOException: Cannot run program "/SqoopScripts/import/usermail/import_t_usermail.sh" (in directory "/azkaban/azkaban-exec-server/executions/1714/d_report_subscribe"): error=13, 权限不够 cause: java.io.IOException: Cannot run program "/SqoopScripts/import/usermail/import_t_usermail.sh" (in directory "/azkaban/azkaban-exec-server/executions/1714/d_report_subscribe"): error=13, 权限不够
21-01-2021 02:26:03 CST import_t_usermail INFO - Finishing job import_t_usermail retry: 3 at 1611167163543 with status FAILED
看到日志里面有"error=13, 权限不够"的错误,我立马想到可能是shell脚本没有执行的权限,然后修改shell脚本的权限为最大权限
chmod 777 import_t_usermail.sh
然后使用azkaban调度,结果还是报错,然后就想是不是用户权限的问题,因为使用的普通用户,shell脚本的文件所有者和文件组别都是普通用户,于是我就试着修改了该文件的的所有者和文件组别为root用户:
修改文件的所有者
chown root 文件/文件夹
修改文件组别
chgrp root 文件/文件夹
修改之后又使用azkaban进行调度,还是报这个错误,我使用普通用户和root用户分别执行shell脚本都可以执行,说明脚本是没问题的,那就只可能是azkaban创建job的问题了,因为job我是在windows环境下使用notepad++创建的,可能会存在空格和文件格式不正确的问题。
我使用vim打开job进行编辑,然后按 Shift + :,输入set ff,发现job文件类型为doc,然后输入set fileformat=unix,将文件类型修改为unix,再次使用azkaban进行任务调度,任务完美运行!!!