gpt4 book ai didi

linux - bash 脚本运行将进程发送到后台

转载 作者:太空宇宙 更新时间:2023-11-04 05:22:16 25 4
gpt4 key购买 nike

嗨,我正在制作一个脚本来执行一些 rsync 过程,对于 rsync 过程,系统管理员已经创建了该脚本,当它运行时它会询问选择选项,所以我想创建一个脚本来从脚本传递该参数并从 cron 运行它。

要从文件中进行 rsync 的目录列表。

filelist=$(cat filelist.txt)

for i in filelist;do
echo -e "3\nY" | ./rsync.sh $i

#这将创建一个 rsync 日志文件 所以我检查日志文件的某些值,如果它为空,我将移至第二个文件。如果文件不为空,我必须启动 rsync 过程,如下所示,这将需要 2 个小时以上。

if [ a != 0 ];then 
echo -e "3\nN" | ./rsync.sh $i

上面的rsync过程需要发送到后台并循环获取下一个文件。我使用 screen 命令进行检查,但 screen 无法与服务器一起使用。我还需要获取运行进程并传递到日志所需的持续时间,当我使用 time 命令时,我无法传递 echo 变量。还需要将其发送到后台并获取下一个文件。感谢任何成功完成这项任务的建议。

问题1. 如何使用 Time 命令发送参数 echo -e“3\nY”|时间 ./rsync.sh $i上面一个不起作用

  • 如何将其发送到后台并在运行上一个 rsync 进程时将下一个文件发送到 rsync。
  • 完整代码

    #!/bin/bash
    filelist=$(cat filelist.txt)
    Lpath=/opt/sas/sas_control/scripts/Logs/rsync_logs
    date=$(date +"%m-%d-%Y")
    timelog="time_result/rsync_time.log-$date"

    for i in $filelist;do
    #echo $i
    b_i=$(basename $i)
    echo $b_i
    echo -e "3\nY" | ./rsync.sh $i
    f=$(cat $Lpath/$(ls -tr $Lpath| grep rsync-dry-run-$b_i | tail -1) | grep 'transferred:' | cut -d':' -f2)
    echo $f
    if [ $f != 0 ]; then
    #date=$(date +"%D : %r")
    start_time=`date +%s`
    echo "$b_i-start:$start_time" >> $timelog
    #time ./rsync.sh $i < echo -e "3\nY" 2> "./time_result/$b_i-$date" &
    time { echo -e "3\nY" | ./rsync.sh $i; } 2> "./time_result/$b_i-$date"
    end_time=`date +%s`
    s_time=$(cat $timelog|grep "$b_i-start" |cut -d ':' -f2)
    duration=$(($end_time-$s_time))
    echo "$b_i duration:$duration" >> $timelog

    fi

    done

    最佳答案

    你的问题不太清楚,但我会尝试:

    (1) 如果我理解正确的话,您想要计时 rsync

    我的第一次尝试是使用 echo xxxx | time rsycnc 。在我的bash上,但这被破坏了(或者不应该工作?)。我通常使用 Zsh 而不是 bash,在 zsht 上,这确实运行得很好。

    如果使用 bash 对您来说很重要,则另一种选择(因为 echo 的时间可能会被忽略)是对整个管道进行计时,即 time (echo xxxx | time rsync) ,或者更简单 time rsync <(echo xxxx)

    (2) 要将进程发送到后台,请添加 &到行。但是,time 命令当然会生成输出(这就是它的目的),并且您不希望在后台接收来自程序的输出。解决方案是重定向输出:

    (time rsync <(echo xxxx) >output.txt 2>error.txt) &

    关于linux - bash 脚本运行将进程发送到后台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39889188/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com