今天遇到一个问题。执行在终端newLISP文字,一切正常,搬去crontab在将无法正常工作。即使crontab -e命令是在同一个用户执行。还是有问题。
因为newLISP脚本使用hive和hadoop。它预计发行环境变量。
所以第一次使用newLISP shell执行(env)命令,将当前环境变量记录到文件evn.lsp中。
然后在newLISP脚本中载入之。
以下是env.lsp文件部分内容:
(set 'local-envs '(("LC_PAPER" "en_US.UTF-8") ("LC_ADDRESS" "en_US.UTF-8") ("HOSTNAME" "hadoopMaster.com") ("LC_MONETARY" "en_US.UTF-8") ("SHELL" "/bin/bash") ("TERM" "dumb") ("HADOOP_HOME" "/usr/local/hadoop") ("HISTSIZE" "5000") ("SSH_CLIENT" "123.125.91.21 44582 22") ("LC_NUMERIC" "en_US.UTF-8") ("SQOOP_HOME" "/home/chenshu/sqoop-1.4.4.bin__hadoop-1.0.0") ("SSH_TTY" "/dev/pts/7") ("LC_ALL" "en_US.UTF-8") ("HISTFILESIZE" "5000") ("USER" "chenshu") ("EMACS" "t") ("LS_COLORS" "") ("LC_TELEPHONE" "en_US.UTF-8") ("HBASE_HOME" "/usr/local/hbase") ("TERMCAP" "") ("TMOUT" "3600") ("COLUMNS" "146") ("MAVEN_HOME" "/opt/apache-maven-3.2.1") ("MAIL" "/var/spool/mail/chenshu") ("PATH" "/usr/local/java/bin:/usr/local/hadoop/bin:/usr/local/hive/bin://usr/local/hbase/bin://usr/local/hive/bin:/usr/local/postgres9.1/bin:/us r/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/data/shell:/data/tools:/opt/apache-maven-3.2.1/bin/:/home/chenshu/sqoop-1.4.4.bin__hadoop-1.0.0/bin/ :/home/chenshu/bin:/opt/apache-maven-3.2.1/bin/:/home/chenshu/sqoop-1.4.4.bin__hadoop-1.0.0/bin/") ("LC_MESSAGES" "en_US.UTF-8")
。。。
还加入了一行代码,能够自己主动遍历上面的list,设置每个环境变量。
(dolist (e local-envs) (env (e 0) (e 1)) )
这样,在crontab中执行test.lsp脚本成功:
* * * * * cd /home/chenshu/export; /usr/bin/newlisp ./test.lsp >/dev/null 2>&1
#!/usr/bin/newlisp (define (write-log msg) (append-file "hive2mysql.log" (string msg " ")) ) (load "/opt/newlisp_util/env.lsp") (set 'hive-create-table-statement (exec (format "hive -e 'show databases' 2>&1"))) (write-log hive-create-table-statement) (exit)
输出结果为Hive中的数据库名称。为保密,这里不列出。
当Jenkins执行脚本出现某些环境变量找不到错误时,也可以用这种方法。
版权声明:本文博主原创文章。博客,未经同意不得转载。