sed修改文件内容

[1] 写了一个 daemon,通过提交上服务器的 pbs 运行。这里实现用 sed 修改 pbs 脚本中的 daemon ID,以支持批量创建不同 ID 的 daemons 一起薅资源。

pbs script

  • 这是送上服务器跑程序的 pbs 模板,语法同 shell,只是开头多了一些配置的命令
  • 通过其中 DAEMON_ID 指定 daemon ID,创建相应的 shell pool 目录作为 [1] 的探测路径,并在此运行 [1]
  • 假设此 pbs 脚本叫 gpu.pbs
#!/bin/bash
#PBS -N daemon-gpu
#PBS -q gpu
#PBS -l nodes=1:ppn=20
#PBS -W x=GRES:gpu@1
#PBS -V
#PBS -S /bin/bash
NP=`cat $PBS_NODEFILE | wc -l`
NN=`cat $PBS_NODEFILE | sort | uniq | tee /tmp/nodes.$$ | wc -l`
cat $PBS_NODEFILE > /tmp/nodefile.$$
cd $PBS_O_WORKDIR
echo begin time: $(date)

# 指定 daemon ID
DAEMON_ID=1  # positive for GPU
# 并为其创建单独的 shell pool
POOL_P=pool${DAEMON_ID}
cd /home/itom/pbs-scripts/daemon
if [ ! -e $POOL_P ]; then
    mkdir $POOL_P
fi

# 把 [1] 的 daemon.py 复制去其独享的 shell pool 目录并执行
if [ ! -e $POOL_P/daemon.py ]; then
    cp daemon.py $POOL_P
fi
cd $POOL_P
# clean old output & error
python daemon.py

# 一些后续处理
rm ./daemon.py
echo "END" >> END.txt
echo $(date) >> END.txt

echo end time: $(date)
rm -f /tmp/nodefile.$$
rm -f /tmp/nodes.$$

batch daemon creation

当运行多个 daemons 时有个问题:因为要把 pbs 脚本提交上服务器,而不是本地执行,好像不能用命令行参数指定 DAEMON_ID因为服务器不会按我想要的方式把参数送给 pbs 脚本执行)。

考虑用另一个 shell(假设叫 do.sh)循环创建。先用 sed 改掉 DAEMON_ID 的赋值,再提交上去:

  • -i 直接修改文件
  • \{0,\} 表示前面的 pattern(即 [0-9])至少出现 0 次,上不封顶,原来匹配原来的 daemon ID
  • 改两处:#PBS -N 后面的名字改掉/加上 daemon ID;DAEMON_ID 赋值一行换成相应 daemon ID
  • 用法:sh do.sh gpu.pbs 1 2 4 7 10,就是依次提交了 5 次 gpu.pbs,daemon ID 分别是 1、2、4、7、10
#!/bin/bash

# 提交 pbs 命令示例
# qsub gpu.pbs

# echo $#
args=($*)
echo ${args[@]}
for i in $(seq 1 `expr ${#args[@]} - 1`); do
    echo --- $i, ${args[i]}
    # 改名
    sed -i "s/\#PBS \-N \([a-zA-Z-]\{1,\}\)[0-9]\{0,\}/\#PBS \-N \1$i/" $1
    sed -n '/\#PBS \-N/'p $1
    # 改 daemon ID
    sed -i "s/DAEMON_ID=[0-9]\{0,\}/DAEMON_ID=$i/" $1
    sed -n '/DAEMON_ID=[0-9]\{0,\}/'p $1
    qsub $1
done

# qstat 查看 pbs 排队状态
watch -n 1 qstat

References

  1. python手写守护进程(daemon)
  2. sed 和 awk 的区别是什么?
  3. sed 简明教程
  4. Linux 三剑客实例详解「grep、sed 、awk」
  5. linux中sed引用shell变量
  6. Shell脚本用for循环遍历参数的方法技巧
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值