背景:
使用datax执行数据同步任务时提示java: command not found
原因:
执行的命令为'/bin/sh -c sudo -u dataops python /data/gdsp/datax/bin/datax.py /data/gdsp/exec/script/6ad3c74129a24043a04f2a9a5a979cd1.json',sudo命令会重置环境变量,查看文件/etc/sudoers,可以看到这样的配置
Defaults env_reset
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
解决方法:
第一种方式:也是最简单的,使用sudo -E来代替sudo即可保留当前用户的环境变量,但缺点也很明显,每次都要加。
第二种方式:修改/etc/sudoers文件,将Defaults env_reset改为
Defaults !env_reset
找到"secure_path"一行,当你执行 sudo 命令时,"secure_path"中包含的路径将被当做默认 PATH 变量使用。
按 “i” 键就可以进入插入模式(Insert mode),添加所需要的路径(如 /usr/java/jdk1.8.0_181-cloudera/bin)到"secure_path"下,
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/java/jdk1.8.0_181-cloudera/bin
注:sudoers不能直接使用vi进去,需要执行以下命令添加权限,修改完成需要修改权限至修改前
chmod u+w /etc/sudoers
chmod u-w /etc/sudoers
编辑完成后,按 “ESC” 键切换为命令行模式,输入 “: wq” 保存并退出。
问题解决。