后台运行

在一些日常业务中,总有一些长时间处理的任务,系统运行这些任务需要一晚甚至一个周末。

这就需要后台运行单元(background work process)来完成,而且其是不会发生超时(time out) 错误的。

进程(job)有下面几种类型:

时间驱动(Time-driven? job):按照用户预先设定的有时间启动进程。

?事件驱动(Event-Driven job):在一个事件或另一个进程后,该进程启动。

周期型(periodic? job)
:在每时或每天,定时执行的进程。

删除型(deleting? job):
为删除系统中盈余的数据的进程,可能会执行较长时间,需要在??

???????????????????????????????????????????????? 后台进行。

进程的属性:

Job name:进程的名最长为32字符。

Job count:为了去该进程在系统中的唯一性。比如周期性进程的名都是一样的,

???????????????????? Job name+Job count就能确定其的唯一性。

Step:在该进程内中定义的程序数量。

Start data:启动的时间点有:立即(immediatlly),指定时间(data/time),

????????????????????? 时间(event)…等等。

Job owner:产生该进程的用户。

Job class:该进程在系统中的执行等级。

Client:决定该进程在哪个Client中执行,有些系统进程必须在Client000中执行。

Target sever:决定该进程在那个服务器中执行,这有助于合理的分配系统资源

进程状态:

Planned:进程已经被定义,但是还没有开始。

Release:进程已经开始,但是进程中定义的程序还没有被执行。

Ready: 进程已经开始,所有程序开始的条件(启动时间)也已满足,等候系统分配运行资源

????????????? (运行所需的后台进程处理单元<BTC-WP>)。

Active:?? 进程开始,而且定义的每一个程序(STEP)都被按序执行。

Finished:
进程顺利完成。

Cancelled:因为错误,进程没有正常完成。

各个进程的关系:

Planned???<>? Release??> Ready -> Active -->? finished or Cancelled

?执行后台进程的方法:

???事务执行命令(transaction code):

?????????? SM36,SM37, SA38

? ABAP 程序:

?????????? SAP系统程序或客户自定义的程序。

外部程序或工具:

???????? 外部工具(第三方)通过BAPI-XBP接口,从外部定义执行后台进程。

后台进程相关的系统表:

TBTCO:? ?存放后台进程所有的信息和状态。

TBTCP:存放后台进程中定义程序的信息。

TBTCS:??? 时间驱动进程相关的信息。

BTCEVTJOB:事件驱动进程相关的信息。

后台进程的日志(joblog):

日志存放在文件系统(其是TemSe子系统)中,列如:/usr/sap/<sid>/sys/global/001joblg…

??
?

一般的问题处理:

问题1:? 后台进程没有启动。

原因1:系统没有足够的资源。可以用T-cd:Sm51,Rz04,SM66,Sm37确认。

?原因2:进程调度(Scheduler)没有运行。T-cd:Sm61确认。

原因3:无法生产日志,用Sm21确认系统日志,和ST11确认developer trace。

?????????????????? 可能是有TemSe不整合或有OS文件的访问问题。

原因4:TCTCO,TCTCP…等一系列表之间的不整合;用SM65->Goto->Additional test->

??????????????? 选择:Perform TemSe check

???????????????????????????? Consistency check DB Table

??????????????????????????????? Remove inconsistencies

? ??????????????->执行

问题2:后台进程在执行的过程中,发生互锁。

原因1:确认应用程序的逻辑,一般情况下这个问题都是有应用程序本身导致的。

原因2:数据库的原因,但是这样的情况较少。

原因3:两个周期进程,间隔时间太短,以至于第一个还没有执行完,第二个已开始执行。

建议·: 根据note-16083中的说明,设定标准进程,以减少系统负担和数据盈余。

?
?

From <http://www.cnblogs.com/t-bug/archive/2012/05/07/2487081.html>

?
?

参考程序

2014年8月14日

13:42

?
?

FORM?create_job?.

?
?

??CONCATENATE?sy-repid?‘DIS‘?sy-datum?sy-uzeit?INTO?memres.

?
?

??DATA:

????lv_job_name??TYPE?tbtcjob-jobname,

????lv_job_count?TYPE?tbtcjob-jobcount.

?
?

*?启动Background?Job

??CONCATENATE?sy-repid?‘_‘?sy-datum?sy-uzeit?INTO?lv_job_name.

??CALL?FUNCTION?‘JOB_OPEN‘

????EXPORTING

??????jobname??????????=?lv_job_name

????IMPORTING

??????jobcount?????????=?lv_job_count

????EXCEPTIONS

??????cant_create_job??=?1

??????invalid_job_data?=?2

??????jobname_missing??=?3

??????OTHERS???????????=?4.

??IF?sy-subrc?<>?0.

????MESSAGE?‘后台运行出错‘?TYPE?‘S‘.

??ENDIF.

?
?

*?提交后台的报表

??SUBMIT?zppr022

??????WITH?s_matnr?IN?s_matnr

??????WITH?p_werks?=?p_werks

??????WITH?s_dispo?IN?s_dispo

??????WITH?s_aufnr?IN?s_aufnr

??????WITH?p_date?=?p_date

??????WITH?sh_only?=?sh_only

??????WITH?p_bgjob?=?p_bgjob

??????WITH?memres?=?memres

??????USER????sy-uname

??????VIA?JOB?lv_job_name

??????NUMBER??lv_job_count

??????AND?RETURN.

??IF?sy-subrc?<>?0.

????MESSAGE?‘后台运行错误‘?TYPE?‘S‘.

????RETURN.

??ELSE.

????CALL?FUNCTION?‘JOB_CLOSE‘

??????EXPORTING

????????jobcount?????????????=?lv_job_count

????????jobname??????????????=?lv_job_name

????????strtimmed????????????=?‘X‘

??????EXCEPTIONS

????????cant_start_immediate?=?1

????????invalid_startdate????=?2

????????jobname_missing??????=?3

????????job_close_failed?????=?4

????????job_nosteps??????????=?5

????????job_notex????????????=?6

????????lock_failed??????????=?7

????????invalid_target???????=?8

????????OTHERS???????????????=?9.

????IF?sy-subrc?<>?0.

??????MESSAGE?‘后台运行出错‘?TYPE?‘S‘.

??????RETURN.

????ENDIF.

??ENDIF.

?
?

*-????检测JOB运行状态

??DATA:?status_according_to_db?TYPE?tbtcjob-status,

????????actual_status?TYPE?tbtcjob-status.

??DATA:?ld_exit?TYPE?flag.

?
?

??DO?100?TIMES.

????CALL?FUNCTION?‘BP_JOB_CHECKSTATE‘

??????EXPORTING

????????dialog?????????????????????=?‘N‘

????????jobname????????????????????=?lv_job_name

????????jobcount???????????????????=?lv_job_count

*????????START_ASAP?????????????????=?‘X‘

??????IMPORTING

????????status_according_to_db?????=?status_according_to_db

????????actual_status??????????????=?actual_status

??????EXCEPTIONS

????????job_does_not_exist?????????=?1

????????no_check_privilege_given???=?2

????????ready_switch_too_dangerous?=?3

????????OTHERS?????????????????????=?99.

????IF?‘AF‘?CS?actual_status?AND?actual_status?<>?‘‘.

??????ld_exit?=?‘X‘.

??????EXIT.???"--->>>?EXIT

????ELSE.

??????WAIT?UP?TO?10?SECONDS.

????ENDIF.

??ENDDO.

?
?

??IF?ld_exit?=?‘X‘.

????IMPORT?r?=?gt_dis[]?FROM?DATABASE?indx(hk)?ID?memres.

????DELETE?FROM?DATABASE?indx(hk)?ID?memres.

??ENDIF.

?
?

ENDFORM.????????????????????"?CREATE_JOB

?
?

执行结果

2014年12月24日

10:13

?
?

除了sm36定义后台任务

也可以在程序界面添加到后台任务

还可以通过在程序中通过代码创建JOB

(如果要等待JOB执行完成 : 监控程序

万一JOB超时

调用者会不会超时

SAP的超时的定义是怎样的

?
?

ALV的SET_FUNCTION_CODE

能否让SAP认为当前的这个session

处于活动?

?
?

)

?
?

关于后台任务的执行结果:

  1. 放在cluster table 中 例如 indx
  2. 放在自定义透明表中
  3. 放在文件中

?
?

跟随事件触发

2014年12月24日

13:18

SM62中定义事件

Sm36定义JOB的时候 选择after event

其他一些触发的方式:

1.在程序中 菜单中选择后台执行

2.SA38

?
?

另外可以通过在普通的report中

触发预定义的事件

达到触发后台任务的目的

?
?

BP_EVENT_RAISE

?
?

默认的执行结果

2015年1月28日

8:54

对于ALV输出

write的结果

?
?

后台执行在spool list中可以查看到

?
?

显示list的内容时

可能因为打印任务中的格式

导致超过255 col的数据无法输出

?
?

解决方案

?
?

?
?

另外,

note的解释通过 自定义格式之类的来解决

?
?

时间: 2024-08-30 07:02:49

后台运行的相关文章

nobup 与 后台运行命令

1. Linux进程状态:R (TASK_RUNNING),可执行状态&运行状态(在run_queue队列里的状态) 2. Linux进程状态:S (TASK_INTERRUPTIBLE),可中断的睡眠状态, 可处理signal 3. Linux进程状态:D (TASK_UNINTERRUPTIBLE),不可中断的睡眠状态, 可处理signal, 有延迟 4. Linux进程状态:T (TASK_STOPPED or TASK_TRACED),暂停状态或跟踪状态, 不可处理signal, 因为根

linux命令后台运行

1.在下达的命令后面加上&,就可以使该命令在后台进行工作,这样做最大的好处就是不怕被ctrl+c这个中断指令所中断. 2. 那大家可能又要问了,在后台执行的程序怎么使它恢复到前台来运行呢?很简单,只用执行fg这个命令,就可以了. 3.可能有些同学又要问了,我现在已经在前台运行的命令,我能把它放到后台去运行么?当然可以了,只要执行ctrl+z就可以做到了.是不是很赞啊! 4.说到这里可能有些同学又要问了,如果我有多个进程在后台运行,那如何恢复到前台来执行呢?这时候就要用到jobs这个命令了,通过j

svn集成ReviewBoard,让post-commit hook后台运行

代码评审(Code Review)不但可以提高质量,而且还是一个知识共享和指导的极好的手段. 代码评审(CodeReview)一般有两种形式:pre-commit-review,post-commit-review. pre-commit-review是指代码提交到代码库前进行代码评审: post-commit-review是指代码提交到代码库后进行代码评审. ReviewBoard是一个开源的基于web的代码评审工具,支持Subversion,CVS,Git和Mercurial版本控制系统.

Linux后台运行

有两种方式: 1. command & : 后台运行,你关掉终端会停止运行2. nohup command & : 后台运行,你关掉终端也会继续运行 一. 简介 Linux/Unix 区别于微软平台最大的优点就是真正的多用户,多任务.因此在任务管理上也有别具特色的管理思想.我们知道,在 Windows 上面,我们要么让一个程序作为服务在后台一直运行,要么停止这个服务.而不能让程序在前台后台之间切换.而 Linux 提供了 fg 和bg 命令,让你轻松调度正在运行的任务.假设你发现前台运行的

linux 让程序在后台运行的几种可靠方法

我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败.如何让命令提交后不受本地关闭终端窗口/网络断开连接的干扰呢?下面举了一些例子, 您可以针对不同的场景选择不同的方式来处理这个问题. 先介绍一下hangup 名称的来由 在 Unix 的早期版本中,每个终端都会通过 modem 和系统通讯.当用户 logout 时,modem 就会挂断(hang up)电话. 同理,当 modem 断开连接时,就

日志监控_ElasticStack5-0001.Logstash快速规范化部署与后台运行?

技术栈线: 1. 支持灵活的处理方式,Elasticsearch是实时全文索引,无需像其它的产品样预先编程才能实现 2. 支持简单的配置方式,Elasticsearch是全部采用JSON接口,Logstash是Ruby DSL设计,都是通用配置语法 3. 支持高效的数据检索,虽然每次查询都是实时计算,但基本上可以实现全天数据查询的秒级响应 4. 支持方便的线性扩展,不管是Elasticsearch集群还是Logstash集群都可以线性扩展 4. 支持绚丽的前端展示,Kibana界面上只需要点击鼠

脚本应用之八:ping工具同时监控多主机(后台运行,并显示)

作用:通过ping工作实时监控多台主机 实现:多进程后台运行,并分区域显示 使用:将欲监控的主机作为参数 演示: 代码专区: #/bin/bash #  LY #  ------------------ #  Copyright 2016.04.14  LingYi ([email protected]) QQ:1519952564 #  "monitor hosts by batch ping in the background" all_sum=0  success_sum=0 f

1014-31-首页12-显示weibo未读数--后台运行---定时器

/** *  当app进入后台时调用 */- (void)applicationDidEnterBackground:(UIApplication *)application{    /**     *  app的状态     *  1.死亡状态:没有打开app     *  2.前台运行状态     *  3.后台暂停状态:停止一切动画.定时器.多媒体.联网操作,很难再作其他操作     *  4.后台运行状态     */    // 向操作系统申请后台运行的资格,能维持多久,是不确定的  

iOS 后台运行实现 --备用

文一 我从苹果文档中得知,一般的应用在进入后台的时候可以获取一定时间来运行相关任务,也就是说可以在后台运行一小段时间. 还有三种类型的可以运行在后以,1.音乐2.location 3.voip 文二 在IOS后台执行是本文要介绍的内容,大多数应用程序进入后台状态不久后转入暂停状态.在这种状态下,应用程序不执行任何代码,并有可能在任意时候从内存中删除.应用程序提供特定的服务,用户可以请求后台执行时间,以提供这些服务. 判断是否支持多线程 UIDevice* device = [UIDevice c

linux后台运行和关闭、查看后台任务

fg.bg.jobs.&.nohup.ctrl+z.ctrl+c 命令 一.& 加在一个命令的最后,可以把这个命令放到后台执行,如 watch -n 10 sh test.sh & #每10s在后台执行一次test.sh脚本 二.ctrl + z 可以将一个正在前台执行的命令放到后台,并且处于暂停状态. 三.jobs 查看当前有多少在后台运行的命令 jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated.但是如果任务被