设为首页 友情链接
在线留言 发表文章
加入收藏 广告联系

刺猬首页

| 专案技术 | 网络技术 | 图形图象 | 网络编程 | 网页设计 | 操作系统 | 服务器 | 技术白皮书 | 在线实验室 | 刺猬论坛 |
小说专版  | 数据库 | 设计赏析 | 存储频道 | 网络安全 | 私服架设 |  Solaris | 网站评估 | PC维护技巧 | 下载中心 | 博 客 |
专   题: | Linux | java | cisco | 防病毒 | 刀片 | SOA | iscsi | ASP.NET | SQL | Oracle |
您现在的位置: IT公社 IT community >> 操作系统 >> UNIX系统 >> 教程正文 用户登录 新用户注册
专 题 栏 目
最 新 热 门
最 新 推 荐
相 关 文 章
Win Vista应用技巧两则
COM+ 集成:.NET 企业服…
Microsoft Windows 2000…
在应用程序中集成 Windo…
优化 Tablet PC 的应用程…
开发 Windows 64 位版本…
COM+ 集成:.NET 企业服…
用.NET来保护数据和应用…
给单调的 Windows 窗体应…
为Windows应用创建简单的…
  应用部署为Solaris 10 SMF服务         
1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101/***************************************/

/* myapp.c */

/***************************************/

#include <unistd.h>

#include <sys/param.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

/* global exit status code */

#define RUN_OK 0

#define CONFIG_ERROR 1

#define FATAL_ERROR 2

/* function declaration */

int read_config(void);

int app_init(void);

void daemonize(void);

int main(int argc, char **argv)

{

FILE *fp;

time_t t;

/* Read the app configuration here if applicable. */

/* If error occurred, return non-zero. */

if (read_config() != RUN_OK)

{

printf("%s: read configuration failuren", argv[0]);

exit(CONFIG_ERROR);

}

/* Initialize application. Any error, return non-zero. */

if (app_init() != RUN_OK)

{

printf("%s: initialization failuren", argv[0]);

exit(FATAL_ERROR);

}

daemonize(); /* Make the application a daemon. */

/* Service logic is placed here. */

while (1)

{

sleep(5); /* Sleep for 5 seconds. In a real application, it could be */

/* waiting for service requests, e.g. waiting on message */

/* queue, etc. */

/* service logic */

if ((fp = fopen("/tmp/myapp.log","a")) != NULL)

{

t = time(0);

fprintf(fp, "myapp is running at %sn",asctime(localtime(&t)));

fclose(fp);

}

else

{

exit(FATAL_ERROR);

}

}

}

/* make the application a daemon */

void daemonize(void)

{

int pid;

int i;

if (pid = fork())

exit(RUN_OK); /* parent exits */

else if (pid < 0)

exit(FATAL_ERROR); /* fork() failed */

/* first child process */

setsid();

if (pid = fork())

exit(RUN_OK); /* first child exits */

else if(pid < 0)

exit(FATAL_ERROR); /* fork() failed */

/* second child */

for (i = 0; i < NOFILE; ++i) /* close all files */

close(i);

chdir("/"); /* change directory to root(/) directory */

umask(0); /* set proper file mask */

}

/* read configuration */

int read_config(void)

{

return RUN_OK; /* OK */

}

/* initialize application */

int app_init(void)

{

return RUN_OK; /* OK */

}

Linux联盟收集整理

应用部署为Solaris 10 SMF服务
 

 

SMF功能概览

Solaris 10中的SMF提供了强大的服务管理功能。以下是一部分重要的功能:

1. SMF向系统管理员提供统一的服务管理平台,利用svcs(1)命令就可以查看SMF所辖的各种服务,利用svccfg(1M)和svcadm(1M)命令可以配置各种服务和管理各种服务。对于传统UNIX,系统管理员必须记住各种服务不同的启动/停止方法、配置修改方法、服务状态及日志查询方法而言, SMF统一管理平台极大地降低了系统管理的难度,也降低了系统管理出错的机率。

2. SMF提供各服务间的依赖关系设定,可以自动按依赖关系顺序启动各服务。这对于传统UNIX以rc脚本文件名排列先后决定启动/停止顺序而言,SMF提供了无可比拟的完善的管理能力。

3. 并行启动不相互依赖的服务,从而使系统启动更快。由于各服务的依赖关系在SMF中有明确的定义,所以不相干的服务完全可以并行启动而不必担心冲突。

4. 自动侦测所辖服务的运行状态,在必要时可以重启服务或停止服务。作为预测性自愈技术(Predictive Self-Healing)的组成部分,SMF可以对所辖服务进行状态监控。根据服务的需要,SMF可以在服务进程不存在时,自动重启服务,或者在服务所依赖关系发生问题时,重启服务。也可以在服务连续发生问题时,将服务置为维护(maintenance)状态。

当然,SMF的管理机制并不排斥传统rc脚本运行服务的机制,以最大程度兼容传统方式的运作。有关SMF更多的介绍,请参看Solaris Service Management Facility - Quickstart Guide。

一个简单的服务程序

<表1是一个简单的程序myapp.c,它运行后将成为后台守护进程存在于系统中,并每间隔5秒钟向日志文件/tmp/myapp.log插入一行记录以报告自己的存在。虽然它实际上不向外提供任何服务,但该程序模拟了一般服务程序的设计结构和运行模式。即,程序运行后以守护进程形式存在于系统,程序头部有模拟服务配置read_config()和初始化app_init()逻辑,中部使用sleep(5)模拟等待服务请求逻辑,通过向日志插入记录模拟服务请求处理逻辑,然后返回至循环开始处sleep(5)继续等待下一个服务请求等。只要在此结构上修改和扩充相应的逻辑就可以将此程序修改为一个真正的服务程序。本文要点是说明如何部署应用为SMF服务,所以仅采用此程序作为例子。

表1.

频道声明:本频道的文章除部分特别声明禁止转载的专稿外,可以自由转载.但请务必注明出出处和原始作者 文章版权归本频道与文章作者所有.对于被频道转载文章的个人和网站,我们表示深深的谢意。

原始作者:佚名 录入时间:2007-3-31 2:41:37
信息来源:不详 投稿信箱:itqoo@126.com
教程录入:itqoo    责任编辑:itqoo 
  • 上一个教程:

  • 下一个教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    - 关于我们 - 合作伙伴 - 友情链接 - 广告刊登 - 投稿热线 - 在线留言版权声明联系方式 -
    IT公社版权所有 粤ICP备05127012号
    Copyrigh@2005-2006 itqoo.com.Inc All Rights Reserved  推荐分辨率 1024*768
    联系站长:E-Mail:itqoo@126.com     MSN:urchincc@hotmail.com    QQ:点击这里给我发消息
    特别感谢:亿太网络提供空间支持