可以perl执行ssh命令,连接远程后执行bash脚本启动加载。
为了防止sh脚本执行进程丢失,可以编写sh脚本判断进程是否还存在。
#!/bin/sh
StartLoader(){
processnum=`ps -ef|grep Loader.sh|grep -v 'grep'|wc -l`
#echo "processnum=" $processnum
if [ $processnum -eq 0 ]
then
sh /home/gbase/gbloader/Loader.sh
fi
}
main(){
StartLoader
}
processnum=`ps -ef|grep gbased|grep -v 'grep'|wc -l`
if [ $processnum -eq 1 ]
then
main
fi
为了周期性的自动执行操作某个shell,可以编写调度。
例如:每隔5分钟执行一次runloader.sh脚本
*/5 * * * * su - gbase -c "sh /home/gbase/runloader.sh"
gccli -ugbase -pgbase20110531 -h127.0.0.1 -P5258 -Dtest -vvv -f <query_join.sql >>query_join.result 2>query_join.err
执行sql脚本文件结果其实是记录到 query_join.err中,而不是query_join.result中。
cmd > file
把 stdout 重定向到 file 文件中;cmd >> file
把 stdout 重定向到 file 文件中(追加);cmd 1> file
把 stdout 重定向到 file 文件中;cmd > file 2>&1
把 stdout 和 stderr 一起重定向到 file 文件中;cmd 2> file
把 stderr 重定向到 file 文件中;cmd 2>> file
把 stderr 重定向到 file 文件中(追加);cmd >> file 2>&1
把 stderr 和 stderr 一起重定向到 file 文件中(追加);cmd < file >file2
cmd 命令以 file 文件作为 stdin,以 file2 文件作为 stdout;cat <>file
以读写的方式打开 file;cmd < file
cmd 命令以 file 文件作为 stdin;cmd << delimiter Here document
从 stdin 中读入,直至遇到 delimiter 分界符。
加载工具识别的空字段内容是"n"。
解决办法:
使用脚本批量替换"null"为"n",命令为
sed "s@null@"'\\n'<file:///\\n'%22@g>"@g"