精华内容
下载资源
问答
  • Linux 脚本内容指定用户执行

    千次阅读 2018-06-29 19:13:00
    ## 因为这些变量下面要用,所以要写最上面, ## 如果直接写下面,则变量获取不到,并且下面的 $ 标识的都要用 引号引起来,否则这些参数接收不到 tarfile=$1 tarfile_name=${tarfile##*/} echo "$...
    #!/bin/bash
    set -x
    
    ## 因为这些变量在下面要用,所以要写在最上面,
    
    ## 如果直接写在下面,则变量获取不到,并且下面的 $ 标识的都要用 引号引起来,否则这些参数接收不到
    
    tarfile=$1
    
    tarfile_name=${tarfile##*/}
    
    echo "$tarfile"
    echo "$tarfile_name"
    
    ## 切换用户,下面的命令都以这个用户创建文件获执行命令
    
    su - admin <<EOF
    
    # 切换目录,因为切换用户后,目录变为 /home ,而不是在当前脚本执行的目录
    
    cd /export/console_deploy
    
    # 判断输入参数是否为空
    
    if [ ! -n "$1" ] || [ ! -n "$2" ] || [ ! -n "$3" ];then
    echo "参数个数少于3个"
    exit;
    fi
    
    # 判断目录是否存在
    
    if [ -d /export/App/"$3" ] ; then
    echo "$3 目录已存在"
    else
    echo "创建目录 $3"
    mkdir /export/App/"$3"
    fi
    
    # 将变量tarfile 中的字符进行替换,变为新的url
    wget ${tarfile//"要替换的字符"/"替换的字符"}
    
    # 解压下载的文件到指定目录
    
    tar zxvf "$tarfile_name" -C ../console_deploy_pkgs
    
    /bin/rm -rf /export/App/"$3"/*
    
    # 解压 war 包 到指定的目录下
    unzip "../console_deploy_pkgs/target/"$2".war" -d /export/App/"$3"
    
    # 替换application.properties 中的 spring.profiles.active= 的值
    sed -i "s/spring.profiles.active=.*/spring.profiles.active=console_dev/g" /export/App/"$3"/WEB-INF/classes/application.properties
    
    /bin/rm -rf "$tarfile_name"
    /bin/rm -rf ../console_deploy_pkgs/*
    
    /export/Shell/"$3"/tomcat
    
    EOF
    

      

    转载于:https://www.cnblogs.com/zhangjianbin/p/9245014.html

    展开全文
  • 本篇文章给大家分享了Linux关机时执行指定脚本功能的实现详解,对此有需要的朋友跟着小编一起学习下。
  • 业务场景:有一段sql需要多个指定时间执行 分析:可以写成crontab,但是由于需要多个时间点去执行,写crontab里会显得冗余,考虑使用循环方式去执行 代码实现: if [ $# -eq 0 ] then time_id=`date -d "-1 ...

    业务场景:有一段sql需要在多个指定时间执行

    分析:可以写成crontab,但是由于需要在多个时间点去执行,写在crontab里会显得冗余,考虑使用循环方式去执行

    代码实现:

    if [ $# -eq 0 ]
     then
       time_id=`date -d "-1 day" +%Y%m%d`
       BEGIN_DATE=`date +%Y-%m-%d`
       END_DATE=`date +%Y-%m-%d`
       CUR_PARTITIONS=`date -d "-1 day" +%Y%m%d`
       STAT_VALUE=`date +%H`
    elif [ $# -eq 2 ]
     then
       format_day=`echo $1|grep -o '[0-9]\{8\}'`
       format_hour=`echo $1|grep -o '[0-9]\{2\}$'`
       BEGIN_DATE=`date -d "$format_day" +%Y-%m-%d`
       END_DATE=`date -d "$format_day" +%Y-%m-%d`
       CUR_PARTITIONS=`date -d "$format_day" +%Y%m%d`
       STAT_VALUE=$2
     else
            echo "the args is wrong ,you should give it like '2014092307'"
            exit 1;
    fi
    
    # work dir
    WORK_DIR="/opt/DATA/goldmine/src/kpi/mall_daily_hour_stat"
    while true
    do
            time=`date +%H:%M:%S`
            echo "now: ${time}"
            if [ '12:01:00' = ${time} ] || [ '14:01:00' = ${time} ] || [ '16:01:00' = ${time} ] || [ '18:01:00' = ${time} ] || [ '20:01:00' = ${time} ] || [ '22:01:00' = ${time} ] || [ '23:50:00' = ${time} ]
            then
                    queryOrderSum="select xxxxxx"
                    hive -e "${queryOrderSum}">${WORK_DIR}/data/tmpDataDailyHourSum.txt
    
                    # format data
                    cat ${WORK_DIR}/data/tmpDataDailyHourSum.txt | awk -F '\t' '{print $1"^"$2"^"$3"^"$4}' | sed 's/NULL/0/g' >${WORK_DIR}/data/dataDailyHourSum_${BEGIN_DATE}_${STAT_VALUE}.txt
    
                    # del data
                    sh /opt/DATA/goldmine/src/kpi/common_script/handleMysqlDB.sh "delete from dd_mall_common_stat where statdate >= '${BEGIN_DATE}' and statdate <= '${END_DATE}' and stat_type='DAILY_HOUR' and stat_value='${STAT_VALUE}'"
    
                    # insertXxx.sh [data.txt] 
                    sh ${WORK_DIR}/insertDailyHour.sh ${WORK_DIR}/data/dataDailyHourSum_${BEGIN_DATE}_${STAT_VALUE}.txt ${STAT_VALUE}
            fi
            sleep 1
    done

    ----------------------------------------------补充-----------------------------------------------------

    在实际的运用场景中,发现了一个问题,如果脚本循环精确到秒的话,很有可能错过这个时间点,并且每秒循环对性能消耗有点多余

    考虑每五分钟循环,需要配合crontab

    1·:在crontab里设置每5分钟执行一次脚本:

    */5 * * * * /opt/DATA/goldmine/src/kpi/mall_daily_hour_stat/product/mall_product_daily_hour_stat.sh >> /opt/DATA/goldmine/src/kpi/mall_daily_hour_stat/product/mall_product_daily_hour_stat.sh.log 2>&1
    2·:修改脚本:

    # work dir
    WORK_DIR="/opt/DATA/goldmine/src/kpi/mall_daily_hour_stat/product"
    
    time=`date +%H:%M`
    #echo "now: ${time}"
    if [ '10:35' = ${time} ] || [ '12:25' = ${time} ] || [ '14:25' = ${time} ] || [ '16:25' = ${time} ] || [ '18:25' = ${time} ] || [ '20:25' = ${time} ] || [ '22:25' = ${time} ] ||[ '23:45' = ${time} ]
    then
            queryMallProduct="select XXX"
    
            #echo ${queryMallProduct}
            hive -e "${queryMallProduct}">${WORK_DIR}/data/tmpDataMallProduct.txt
    
            # format data
            cat ${WORK_DIR}/data/tmpDataMallProduct.txt | awk -F '\t' '{print $1"^"$2"^"$3"^"$4"^"$5"^"$6"^"$7"^"$8}' | sed 's/NULL/0/g' >${WORK_DIR}/data/dataMallProduct_${BEGIN_DATE}.txt
    
            # del data
            sh /opt/DATA/goldmine/src/kpi/common_script/handleMysqlDB.sh "delete from dd_app_tuan_product_stat where statdate >= '${BEGIN_DATE}' and statdate <= '${END_DATE}'"
    
            # insertXxx.sh [data.txt] 
            sh ${WORK_DIR}/insertMallProductDailyHourStat.sh ${WORK_DIR}/data/dataMallProduct_${BEGIN_DATE}.txt ${BEGIN_DATE}
            echo ${time}
    fi



    展开全文
  • Linux在任意目录下执行指定脚本

    千次阅读 2020-10-16 18:20:32
    我有个脚本,我只能在脚本所在的文件夹下面运行,这样的话很不方便,如果我去了别的目录下面的话,我就无法运行这个脚本了… 解决 profile中设置PATH, 假如我想给 xcall 脚本设置能让任意的目录下去运行, 此时xcall...

    前言

    我有个脚本,我只能在脚本所在的文件夹下面运行,这样的话很不方便,如果我去了别的目录下面的话,我就无法运行这个脚本了…

    解决

    在profile中设置PATH,

    假如我想给 xcall 脚本设置能让在任意的目录下去运行,
    此时xcall在/root/soft/script 目录下.

    编辑环境变量

    [root@zjj101 etc]# cd /etc
    [root@zjj101 etc]# vim profile
    
    # 上面省略........
    export HIVE_HOME=/root/soft/hive-1.2.1
    export PATH=$PATH:$HIVE_HOME/bin
    
    export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    # 添加这个内容,注意路径不要写错了
    export PATH=$PATH:/root/soft/script
    export PATH
    
    

    注:= 等号两边不能有任何空格。这种方法最好,除非手动强制修改PATH的值,否则将不会被改变。

    刷新配置文件

    需要在etc目录下去执行source profile

    [root@zjj101 etc]# source profile
    

    其次对于profile来说一定要注意整个编辑的过程,一旦你输入一些格式不正确的文本(如把windows编码的文本复制过来),就会造成profile文件无法正常解析等错误

    验证效果

    这样放在/root/soft/script下的脚本就都能使用了.

    在etc目录下面

    
    [root@zjj101 etc]# sh xcall jps
    要执行的命令是jps
    ---------------------zjj101-----------------
    22353 NodeManager
    90933 DataNode
    41974 RunJar
    22105 ResourceManager
    90808 NameNode
    77549 Jps
    ---------------------zjj102-----------------
    28428 Jps
    ---------------------zjj103-----------------
    31409 Jps
    [root@zjj101 etc]# 
    

    在root目录下面也能使用

    [root@zjj101 etc]# cd ~
    [root@zjj101 ~]# sh xcall jps
    要执行的命令是jps
    ---------------------zjj101-----------------
    22353 NodeManager
    90933 DataNode
    41974 RunJar
    22105 ResourceManager
    90808 NameNode
    77598 Jps
    ---------------------zjj102-----------------
    28465 Jps
    ---------------------zjj103-----------------
    31447 Jps
    [root@zjj101 ~]# 
    
    
    展开全文
  • 使用FTP定时批量下载指定文件的shell脚本,具体实例介绍如下所示,需要的朋友参考下吧
  • shell脚本实现间隔一定时间执行一次任务 1.编写shell脚本 while [ true ]; do sleep 20 bash test.sh >> /tmp/date.txt done 2.后台运行 nohup bash ceshi.sh 2>&1 > /dev/null & 3.确认...

    shell脚本实现间隔一定时间执行一次任务

    1.编写shell脚本

    while [ true ]; do
    sleep 20
    bash test.sh  >> /tmp/date.txt
    done

    2.后台运行

    nohup bash test.sh 2>&1 > /dev/null &

    3.确认每秒执行

    tail -f /tmp/date.txt

    4. 停止脚本运行进程

    ps -ef | grep test.sh |kill -9

    展开全文
  • shell脚本指定用户执行shell命令

    千次阅读 2020-06-01 18:34:41
    /bin/bash su - elk 中,也可以用以下方法实现: su - elk -c "pwd" 切换用户只执行一条命令的可以用: su - user -c command 切换用户执行一个shell文件可以用: su - user -s /bin/bash shell.sh
  • linux运行的系统中长时间运行可能会产生大量的日志文件或其它文件,如果不定时删除,会影响系统的某些功能,下面是通过crontab定时执行删除脚本来实现: cat delbak.sh #!/bin/sh location="/root/sqlbak/" find $...
  • 2019独角兽企业重金招聘Python工程师标准>>> ...我想最终shell处理时先切换到指定用户环境,执行脚本,最后还原回来。 转载于:https://my.oschina.net/douglas/blog/167135
  • 执行shell脚本进入指定目录

    万次阅读 多人点赞 2013-06-27 16:52:03
    在linux环境下,常有通过shell脚本进入指定目录的操作,例如有一段脚本chdir.sh: #!/bin/sh cd /home/user/Downloads pwd  shell环境下通过./chdir.sh执行这段脚本是无法进入Downloads目录的; 这是因为shell...
  • Linux配置定时执行指定脚本

    万次阅读 2018-06-08 15:10:04
    在Linux下,有时需要定时执行一些任务,如定时检测系统资源信息、定时备份数据库等操作,可以借助crontab命令,其基本命令格式如下: * * * * * {命令} 第一个*表示每xx(1-59)分钟,每分钟用*或*/1表示 第二个*...
  • 无论是命令行或者shell脚本中都可以执行 核心语句。 这里特别给出shell脚本中的写法: #!/bin/bash # 这句很重要,可以理解为引入环境变量 . /home/oracle/.bash_profile # 定义current_time 变量,格式化...
  • sudo vi /etc/sudoers 添加: 用户名 ALL = (ALL) NOPASSWD: 脚本路径 例: lzh ALL = (ALL) NOPASSWD: /home/lzh/ssh.sh 保存后,执行脚本就不用输入密码了
  • Linux shell脚本的建立与执行

    万次阅读 2016-10-14 10:02:08
    可以把太多的命令写成一个脚本,这样每次执行一遍 shell文件,就可以省去了敲击键盘的时间。于是网上搜了一些有关Linux脚本编程的内容。 Shell不仅仅是命令的收集,而且是一门非常棒的编程语言。您可以通过...
  • shell脚本编写时的系统和执行脚本的系统不一致,比如windows系统编写的脚本,放到linux系统时会遇到此问题。windows下编写的.sh文件为dos格式,而linux只能执行格式为unix格式的脚本。 解决方法 通过vim打开要执....
  • shell脚本产生指定时间内的每天日期

    千次阅读 2016-12-28 21:04:56
    shell脚本 产生每日日期 按日期执行脚本
  • su - user -c program其中,user为指定用户,program为要执行的程序例如:启动cassandra不指定用户:nohup -c "$CASSANDRA_DIR/bin/cassandra" &gt;&gt; $CASSANDRA_DIR/logs/system.log 2&...
  • root用户执行: shell> sudo -H -u testUser bash -c "touch test
  • (1)文件夹/etc/init.d/下创建关机时需要执行脚本file_name; (2)分别文件夹/etc/rc0.d/和/etc/rc6.d/下创建该该脚本文件的链接文件K07file_name: sudo ln -s /etc/init.d/file_name /etc/rc0.d/K07file_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 285,779
精华内容 114,311
关键字:

linux脚本在指定时间执行

linux 订阅