目录:

1.1 Celery介绍返回顶部

  参考博客:http://www.cnblogs.com/alex3714/p/6351797.html

  1、celery应用举例

      1、Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理,
          如果你的业务场景中需要用到异步任务,就可以考虑使用celery

      2、你想对100台机器执行一条批量命令,可能会花很长时间 ,但你不想让你的程序等着结果返回,而是给你返回 一个任务ID,
        你过一段时间只需要拿着这个任务id就可以拿到任务执行结果, 在任务执行ing进行时,你可以继续做其它的事情

      3、Celery 在执行任务时需要通过一个消息中间件来接收和发送任务消息,以及存储任务结果, 一般使用rabbitMQ or Redis

  2、Celery有以下优点

      1、简单:一单熟悉了celery的工作流程后,配置和使用还是比较简单的

      2、高可用:当任务执行失败或执行过程中发生连接中断,celery 会自动尝试重新执行任务

      3、快速:一个单进程的celery每分钟可处理上百万个任务

      4、灵活: 几乎celery的各个组件都可以被扩展及自定制

  3、Celery基本工作流程图

      

    user:用户程序,用于告知celery去执行一个任务。
    broker: 存放任务(依赖RabbitMQ或Redis,进行存储)
    worker:执行任务

1.2 celery简单使用返回顶部

   1、安装

      1.  安装celery pip3 install celery             # ln -s /usr/local/python3/bin/celery /bin/celery

      2.  安装redis

   2、创建tasks.py文件进行验证

  1. from celery import Celery
  2. import time
  3.  
  4. app = Celery('TASK',
  5. broker='redis://localhost',
  6. backend='redis://localhost')
  7.  
  8. @app.task
  9. def add(x, y):
  10. print("running..add.", x, y)
  11. return x + y
  12.  
  13. @app.task
  14. def minus(x, y):
  15. time.sleep(60)
  16. print("running..minus.", x, y)
  17. return x - y

tasks.py

    1、启动Celery Worker来开始监听并执行任务

        celery -A tasks worker --loglevel=info            # taskstasks.py文件:必须在tasks.py所在目录下执行

    2、调用任务:再打开两个终端,进行命令行模式,调用任务

         >>> import tasks

        >>> import tasks

        >>> t2 = tasks.minus.delay(9,11)

        #然后在另一个终端重复上面步骤执行

        >>> t1 = tasks.add.delay(3,4)

        >>> t1.get()                                                   #由于t2执行sleep3s所以t1.get()需要等待

  3、celery其他命令

      >>> t.ready()                                                  #返回true证明可以执行,不必等待

      >>> t.get(timeout=1)                                      #如果1秒不返回结果就超时,避免一直等待

      >>> t.get(propagate=False)                          #如果执行的代码错误只会打印错误信息

      >>> t.traceback                                             #打印异常详细结果

1.3 在项目中如何使用celery返回顶部

  1、创建目录celery_pro,并在celery_pro下创建下面两个文件

  1. # -*- coding:utf8 -*-
  2. from __future__ import absolute_import, unicode_literals
  3. #1. absolute_import 可以使导入的celery是python绝对路基的celery模块,不是当前我们创建的celery.py
  4. #2. unicode_literals 模块可能是python2和3兼容的,不知道
  5. from celery import Celery
  6. # from .celery import Celery #这样才是导入当前目录下的celery
  7.  
  8. app = Celery('proj',
  9. broker='redis://localhost',
  10. backend='redis://localhost',
  11. include=['celery_pro.tasks',
  12. 'celery_pro.tasks2',
  13. ])
  14. #celery-pro是存放celery文件的文件夹名字
  15.  
  16. #实例化时可以添加下面这个属性
  17. app.conf.update(
  18. result_expires=3600, #执行结果放到redis里,一个小时没人取就丢弃
  19. )
  20.  
  21. # 配置定时任务:每5秒钟执行 调用一次celery_pro下tasks.py文件中的add函数
  22. app.conf.beat_schedule = {
  23. 'add-every-5-seconds': {
  24. 'task': 'celery_pro.tasks.add',
  25. 'schedule': 5.0,
  26. 'args': (16, 16)
  27. },
  28. }
  29. app.conf.timezone = 'UTC'
  30.  
  31. if __name__ == '__main__':
  32. app.start()

celery.py

  1. # -*- coding:utf8 -*-
  2. from __future__ import absolute_import, unicode_literals
  3. from .celery import app #从当前目录导入app
  4.  
  5. #写一个add函数
  6. @app.task
  7. def add(x, y):
  8. return x + y

tasks.py

  1. # -*- coding:utf8 -*-
  2. from __future__ import absolute_import, unicode_literals
  3. from .celery import app
  4. import time,random
  5.  
  6. @app.task
  7. def randnum(start,end):
  8. time.sleep(3)
  9. return random.randint(start,end)

tasks2.py

touch __init__.py                     # 在celery_pro目录下新建__init__.py文件,否则执行命令时会报错

  2、执行下面两条命令即可让celery定时执行任务了 

    1、 启动一个worker:在celery_pro外层目录下执行

        celery -A celery_pro worker -l info

    2、 启动任务调度器 celery beat

        celery -A celery_pro beat -l info

    3、执行效果

        看到celery运行日志中每5秒回返回一次 add函数执行结果    

  3、启动celery的worker:每台机器可以启动8个worker

         1pythondir目录下启动 /pythondir/celery_pro/ 目录下的worker

celery -A celery_pro worker -l info

                  2、后台启动worker/pythondir/celery_pro/目录下执行

celery multi start w1 -A celery_pro -l info             #在后台启动w1这个worker

celery multi start w1 w2 -A celery_pro -l info       #一次性启动w1,w2两个worker

celery -A celery_pro status                                       #查看当前有哪些worker在运行

celery multi stop w1 w2 -A celery_pro                   #停止w1,w2两个worker

celery multi restart w1 w2 -A celery_pro               #重启w1,w2两个worker

  1. python3
  2. from celery_pro import tasks,tasks2
  3.  
  4. t1 = tasks.add.delay(34,3)
  5. t2 = tasks2.randnum.delay(1,10000)
  6. t1.get()
  7. t2.get()

手动给celery分配任务:在/pythondir/下执行

1.4 celery与Django项目最佳实践返回顶部

  1. pip3 install Django==2.0.4
  2. pip3 install celery==4.3.0
  3. pip3 install redis==3.2.1
  4. pip3 install ipython==7.6.1
  5.  
  6. find ./ -type f | xargs sed -i 's/\r$//g'    # 批量将当前文件夹下所有文件装换成unix格式
    celery  multi start celery_test -A celery_test -l debug --autoscale=50,5 # celery并发数:最多50个,最少5个
    http://docs.celeryproject.org/en/latest/reference/celery.bin.worker.html#cmdoption-celery-worker-autoscale
  1. ps auxww|grep "celery worker"|grep -v grep|awk '{print $2}'|xargs kill -9 # 关闭所有celery进程

  1、Django中使用celery介绍(celery无法再windows下运行)

      1)在Django中使用celery时,celery文件必须以tasks.py

      2)Django会自动到每个APP中找tasks.py文件

  2、 创建一个Django项目celery_test,和app01

  3、在与项目同名的目录下创建celery.py 

  1. # -*- coding: utf-8 -*-
  2. from __future__ import absolute_import
  3. import os
  4. from celery import Celery
  5.  
  6. # 只要是想在自己的脚本中访问Django的数据库等文件就必须配置Django的环境变量
  7. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'celery_test.settings')
  8.  
  9. # app名字
  10. app = Celery('celery_test')
  11.  
  12. # 配置celery
  13. class Config:
  14. BROKER_URL = 'redis://192.168.56.11:6379'
  15. CELERY_RESULT_BACKEND = 'redis://192.168.56.11:6379'
  16.  
  17. app.config_from_object(Config)
  18. # 到各个APP里自动发现tasks.py文件
  19. app.autodiscover_tasks()

celery.py

  4、在与项目同名的目录下的 __init__.py 文件中添加下面内容

  1. # -*- coding:utf8 -*-
  2. from __future__ import absolute_import, unicode_literals
  3.  
  4. # 告诉Django在启动时别忘了检测我的celery文件
  5. from .celery import app as celery_ap
  6. __all__ = ['celery_app']

__init__.py

  5、创建app01/tasks.py文件

  1. # -*- coding:utf8 -*-
  2. from __future__ import absolute_import, unicode_literals
  3. from celery import shared_task
  4.  
  5. # 这里不再使用@app.task,而是用@shared_task,是指定可以在其他APP中也可以调用这个任务
  6. @shared_task
  7. def add(x, y):
  8. return x + y

tasks.py

  6、在setings.py文件指定redis服务器的配置

  1. CELERY_BROKER_URL = 'redis://localhost'
  2. CELERY_RESULT_BACKEND = 'redis://localhost'

settings.py

  7、celery_test这个Django项目拷贝到centos7.3django_test文件夹中

  8、保证启动了redis-server

  9、 启动一个celeryworker

      celery -A celery_test worker -l info

  10、Linux中启动 Django项目

      python3 manage.py runserver 0.0.0.0:9000

  11、访问http://1.1.1.3:9000/celery_call/ 获取任务id

      

  12、根据11中的任务id获取对应的值

      http://1.1.1.3:9000/celery_result/?id=5065b65b-0c01-430a-a67f-9531fe3e8d90

1.5 基于步骤1.4:在django中使用计划任务功能 返回顶部

  1、Django中使用celery的定时任务需要安装django-celery-beat

      pip3 install django-celery-beat

  2、 在Django的settings中注册django_celery_beat

  1. INSTALLED_APPS = (
  2. ...,
  3. 'django_celery_beat',
  4. )

  3、执行创建表命令

      python3 manage.py makemigrations

      python3 manage.py migrate

      python3 manage.py startsuperuser

  4、运行Django项目

      celery -A celery_test worker -l info

      python3 manage.py runserver 0.0.0.0:9000

  5、登录 http://1.1.1.3:9000/admin/ 可以看到多了三张表

      

  6、在intervals表中添加一条每5秒钟执行一次的任务的时钟

      

  7、在Periodic tasks表中创建任务

      

  8、在/django_test/celery_test/目录下执行下面命令

      celery -A celery_test worker -l info                                                   #启动一个worker

      python manage.py runserver 0.0.0.0:9000                           #运行Django项目

      celery -A celery_test beat -l info -S django                                                   #启动心跳任务

      说明:

        运行上面命令后就可以看到在运行celery -A celery_test worker -l info         的窗口中每5秒钟执行一次app01.tasks.add: 2+3=5

  9、关于添加新任务必须重启心跳问题

      1、 每次在Django表中添加一个任务就必须重启一下beat

      2、 但是Django中有一个djcelery插件可以帮助我们不必重启

1.6 django+celery+redis实现异步周期任务返回顶部

  注:python的celery模块 4.2.0版本, 刚开始安装的未4.1.1版本,但是定时任务居然不执行

  1、在settings.py中配置celery

  1. #1、如果在django中需要周期性执行,在这里需要注册 django_celery_beat 中间件
  2. INSTALLED_APPS = [
  3. '''
  4. 'django_celery_beat',
  5. '''
  6. ]
  7.  
  8. TIME_ZONE = 'Asia/Shanghai' # 将默认的UTC时区给成中国时区
  9.  
  10. #2、celery:配置celery
  11. BROKER_URL = 'redis://localhost:6379'
  12. CELERY_RESULT_BACKEND = 'redis://localhost:6379'
  13. CELERY_ACCEPT_CONTENT = ['application/json']
  14. CELERY_TASK_SERIALIZER = 'json'
  15. CELERY_RESULT_SERIALIZER = 'json'
  16. CELERY_TASK_RESULT_EXPIRES = 60 * 60
  17. CELERY_TIMEZONE = 'Asia/Shanghai'
  18. CELERY_ENABLE_UTC=False
  19. CELERY_ANNOTATIONS = {'*': {'rate_limit': '500/s'}}
  20. CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'

settings.py

  2、在与项目同名的目录下创建celery.py 

    更多定时参考官网:http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html#crontab-schedules

  1. # -*- coding: utf-8 -*-
  2.  
  3. from __future__ import absolute_import
  4. import os
  5. from celery import Celery
  6. from celery.schedules import crontab
  7. from datetime import timedelta
  8. from kombu import Queue
  9.  
  10. # set the default Django settings module for the 'celery' program.
  11. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'celery_test.settings')
  12.  
  13. from django.conf import settings
  14.  
  15. app = Celery('celery_test')
  16.  
  17. # Using a string here means the worker will not have to
  18. # pickle the object when using Windows.
  19. class Config:
  20. BROKER_URL = 'redis://1.1.1.3:6379'
  21. CELERY_RESULT_BACKEND = 'redis://1.1.1.3:6379'
  22. CELERY_ACCEPT_CONTENT = ['application/json']
  23. CELERY_TASK_SERIALIZER = 'json'
  24. CELERY_RESULT_SERIALIZER = 'json'
  25. CELERY_TIMEZONE = 'Asia/Shanghai'
  26. ENABLE_UTC = False
  27. CELERY_TASK_RESULT_EXPIRES = 60 * 60
  28. CELERY_ANNOTATIONS = {'*': {'rate_limit': '500/s'}}
  29. # 每次取任务的数量
  30. # CELERYD_PREFETCH_MULTIPLIER = 10
  31. # 每个worker执行多少次任务之后就销毁,防止内存泄漏。相当于--maxtasksperchild参数
  32. CELERYD_MAX_TASKS_PER_CHILD = 16
  33. # 防止死锁
  34. # CELERYD_FORCE_EXECV = True
  35. # 任务发出后,经过一段时间还未收到acknowledge , 就将任务重新交给其他worker执行
  36. # CELERY_DISABLE_RATE_LIMITS = True
  37. # CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'
  38.  
  39. app.config_from_object(Config)
  40. app.autodiscover_tasks()
  41.  
  42. #crontab config
  43. app.conf.update(
  44. CELERYBEAT_SCHEDULE = {
  45. # 每隔三分钟执行一次add函数
  46. 'every-3-min-add': {
  47. 'task': 'app01.tasks.add',
  48. 'schedule': timedelta(seconds=180)
  49. },
  50. # 每天下午15:420执行
  51. 'add-every-day-morning@14:50': {
  52. 'task': 'app01.tasks.minus',
  53. 'schedule': crontab(hour=15, minute=20, day_of_week='*/1'),
  54. },
  55. },
  56. )
  57.  
  58. Queue('transient', routing_key='transient',delivery_mode=1)

celery.py

  3、在任意app下创建tasks.py (django会自动到各app中找到此tasks文件)

  1. # -*- coding:utf8 -*-
  2. from __future__ import absolute_import, unicode_literals
  3. from celery import shared_task
  4.  
  5. # 这里不再使用@app.task,而是用@shared_task,是指定可以在其他APP中也可以调用这个任务
  6. @shared_task
  7. def add():
  8. print 'app01.tasks.add'
  9. return 222 + 333
  10.  
  11. @shared_task
  12. def minus():
  13. print 'app01.tasks.minus'
  14. return 222 - 333

tasks.py

  4、在与项目同名的目录下的 __init__.py 文件中添加下面内容

  1. # -*- coding:utf8 -*-
  2. from __future__ import absolute_import, unicode_literals
  3.  
  4. # 告诉Django在启动时别忘了检测我的celery文件
  5. from .celery import app as celery_ap
  6. __all__ = ['celery_app']

__init__.py

  5、启动脚本(记得开启celery服务)

    1、启动django程序

        python manage.py runserver 0.0.0.0:8000

  1. #!/usr/bin/env bash
  2.  
  3. source ../env/bin/activate
  4.  
  5. export DJANGO_SETTINGS_MODULE=celery_test.settings
  6.  
  7. base_dir=`pwd`
  8. mup_pid() {
  9. echo `ps -ef | grep -E "(manage.py)(.*):8000" | grep -v grep| awk '{print $2}'`
  10. }
  11. start() {
  12. python $base_dir/manage.py runserver 0.0.0.0:8000 &>> $base_dir/django.log 2>&1 &
  13. pid=$(mup_pid)
  14. echo -e "\e[00;31mmup is running (pid: $pid)\e[00m"
  15. }
  16.  
  17. stop() {
  18. pid=$(mup_pid)
  19. echo -e "\e[00;31mmup is stop (pid: $pid)\e[00m"
  20. ps -ef | grep -E "(manage.py)(.*):8000" | grep -v grep| awk '{print $2}' | xargs kill -9 &> /dev/null
  21.  
  22. }
  23.  
  24. restart(){
  25. stop
  26. start
  27. }
  28.  
  29. # See how we were called.
  30. case "$1" in
  31. start)
  32. start
  33. ;;
  34. stop)
  35. stop
  36. ;;
  37.  
  38. restart)
  39. restart
  40. ;;
  41.  
  42. *)
  43. echo $"Usage: $0 {start|stop|restart}"
  44. exit 2
  45. esac

service.sh

    2、启动celery的worker:每台机器可以启动8个worker

        celery -A celery_test worker -l info

  1. #!/bin/bash
  2. source ../env/bin/activate
  3. export C_FORCE_ROOT="true"
  4. base_dir=`pwd`
  5.  
  6. celery_pid() {
  7. echo `ps -ef | grep -E "celery -A celery_test worker" | grep -v grep| awk '{print $2}'`
  8. }
  9. start() {
  10. celery multi start celery_test -A celery_test -l debug --autoscale=50,5 --logfile=$base_dir/var/celery-%I.log --pidfile=celery_test.pid
  11. }
  12. restart() {
  13. celery multi restart celery_test -A celery_test -l debug
  14. }
  15. stop() {
  16. celery multi stop celery_test -A celery_test -l debug
  17. }
  18. #restart(){
  19. # stop
  20. # start
  21. #}
  22.  
  23. # See how we were called.
  24. case "$1" in
  25. start)
  26. start
  27. ;;
  28. restart)
  29. restart
  30. ;;
  31. stop)
  32. stop
  33. ;;
  34. *)
  35. echo $"Usage: $0 {start|stop|restart}"
  36. exit 2
  37. esac
  38.  
  39. #nohup celery -A celery_test worker -l debug --concurrency=10 --autoreload & >>celery.log

start-celery.sh

    3、启动celery 定时任务运行

        celery -A celery_test beat -l debug

  1. #!/bin/bash
  2. #celery 定时任务运行
  3. source ../env/bin/activate
  4. export C_FORCE_ROOT="true"
  5. base_dir=`pwd`
  6.  
  7. celery_pid() {
  8. echo `ps -ef | grep -E "celery -A celery_test beat" | grep -v grep| awk '{print $2}'`
  9. }
  10. start() {
  11. #django 调度定时任务
  12. #celery -A celery_test beat -l info -S django >> $base_dir/var/celery-cron.log 2>&1 &
  13. celery -A celery_test beat -l debug >> $base_dir/var/Scheduler.log 2>&1 &
  14. sleep 3
  15. pid=$(celery_pid)
  16. echo -e "\e[00;31mcelery is start (pid: $pid)\e[00m"
  17. }
  18. restart() {
  19. pid=$(celery_pid)
  20. echo -e "\e[00;31mcelery is restart (pid: $pid)\e[00m"
  21. ps auxf | grep -E "celery -A celery_test beat" | grep -v grep| awk '{print $2}' | xargs kill -HUP &> /dev/null
  22. }
  23. stop() {
  24. pid=$(celery_pid)
  25. echo -e "\e[00;31mcelery is stop (pid: $pid)\e[00m"
  26. ps -ef | grep -E "celery -A celery_test beat" | grep -v grep| awk '{print $2}' | xargs kill -TERM &> /dev/null
  27. }
  28.  
  29. case "$1" in
  30. start)
  31. start
  32. ;;
  33. restart)
  34. restart
  35. ;;
  36. stop)
  37. stop
  38. ;;
  39. *)
  40. echo $"Usage: $0 {start|stop|restart}"
  41. exit 2
  42. esac

celery-crond.sh

    4、windows下编写的脚本文件,放到Linux中无法识别格式

        在Linux中执行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory

        set ff=unix

        dos2unix start-celery.sh
        dos2unix celery-crond.sh

  6、常见报错 

    1、Received unregistered task of type ‘XXX’ Celery报错(定时任务中无法找到对应tasks.py文件)

        app = Celery('opwf', include=['api_workflow.tasks'])       # api_workflow这个app中的tasks文件

1.7  python3.7 + Django2.0.4 + celery4.3配置使用

1111111111111111111

10: Celery的更多相关文章

  1. Windows 环境下基于 Redis 的 Celery 任务调度模块的实现

    搭建环境: Windows-x64 10 Celery 3.1.23 Celery-with-redis 3.0 Redis-win32-win64 2.4.5   实现步骤: 1.安装 Redis ...

  2. Python 任务队列 Celery

    一. celery 简介 Celery 是一个专注于实时处理和任务调度的分布式任务队列, 同时提供操作和维护分布式系统所需的工具.. 所谓任务就是消息, 消息中的有效载荷中包含要执行任务需要的全部数据 ...

  3. Celery 分布式任务队列快速入门

    Celery 分布式任务队列快速入门 本节内容 Celery介绍和基本使用 在项目中如何使用celery 启用多个workers Celery 定时任务 与django结合 通过django配置cel ...

  4. 【转】Celery 分布式任务队列快速入门

    Celery 分布式任务队列快速入门 本节内容 Celery介绍和基本使用 在项目中如何使用celery 启用多个workers Celery 分布式 Celery 定时任务 与django结合 通过 ...

  5. Configuring and Running Django + Celery in Docker Containers

    Configuring and Running Django + Celery in Docker Containers  Justyna Ilczuk  Oct 25, 2016  0 Commen ...

  6. windows下安装redis、celery,并启动测试

    Windows 环境下基于 Redis 的 Celery 任务调度模块的实现 搭建环境: Windows-x64 10 Celery 3.1.23 Celery-with-redis 3.0 Redi ...

  7. [源码解析] 并行分布式框架 Celery 之 worker 启动 (1)

    [源码解析] 并行分布式框架 Celery 之 worker 启动 (1) 目录 [源码解析] 并行分布式框架 Celery 之 worker 启动 (1) 0x00 摘要 0x01 Celery的架 ...

  8. [源码解析] 分布式任务队列 Celery 之启动 Consumer

    [源码解析] 分布式任务队列 Celery 之启动 Consumer 目录 [源码解析] 分布式任务队列 Celery 之启动 Consumer 0x00 摘要 0x01 综述 1.1 kombu.c ...

  9. [源码解析] 并行分布式任务队列 Celery 之 Task是什么

    [源码解析] 并行分布式任务队列 Celery 之 Task是什么 目录 [源码解析] 并行分布式任务队列 Celery 之 Task是什么 0x00 摘要 0x01 思考出发点 0x02 示例代码 ...

随机推荐

  1. check process id exists

    kill -0 pid sending the signal 0 to a given PID just checks if any process with the given PID is run ...

  2. 「美团外卖APP签约快捷支付」流程体验

    §1 添加银行卡 新用户在美团外卖APP订餐支付时,首先要绑定银行卡.如下是“添加银行卡”页,输入卡号后,系统自动调用卡bin库校验卡号的有效性,如果有效会显示发卡行和卡类型(借记卡/贷记卡).  这 ...

  3. Hadoop书单词

    Hadoop fundamentals :Hadoop原理 英 [ˌfʌndə'mentlz] 美 [ˌfʌndə'mentlz] n.原理; 基本原则,基本法则( fundamental的名词复数) ...

  4. PHP判断ip地址是否合法

    1.获取真正ip地址 function get_ip(){ //判断服务器是否允许$_SERVER if(isset($_SERVER)){ if(isset($_SERVER[HTTP_X_FORW ...

  5. 安装模块时报错“error: Microsoft Visual C++ 14.0 is required…”

    安装pymssql时报错:在安装的过程中遇到了“error: Microsoft Visual C++ 14.0 is required…” 解决办法: 进入https://www.lfd.uci.e ...

  6. Block 循环引用(中)

    不会造成循环引用的block 大部分GCD方法 dispatch_async(dispatch_get_main_queue(), ^{ [self doSomething]; }); 因为self并 ...

  7. 在lua中从一个字符串中移除空间源码

    /* trim.c - based on http://lua-users.org/lists/lua-l/2009-12/msg00951.html from Sean Conner */ #inc ...

  8. canvas添加水印

    <canvas id="canvas"></canvas><canvas id="water"></canvas> ...

  9. linux 远程执行命令

    命令: ssh 命令参数: -l 指定登入用户 -p 设置端口号 -f 后台运行,并推荐加上 -n 参数 -n 将标准输入重定向到 /dev/null,防止读取标准输入 -N 不执行远程命令,只做端口 ...

  10. loadRunner手动关联,通过 web_reg_save_param()函数

    Action() { //<B>sign up now</B></A>      /*     web_reg_save_param_regexp(         ...