免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1241 | 回复: 1
打印 上一主题 下一主题

[HELP!]Unix下程序提交crontab的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-06-11 15:17 |只看该作者 |倒序浏览
我要在程序里根据设置的条件提交crontab作业.现在不管是用system还是用fork后execl都不行,奇怪的是把这个程序的进程杀死后发现这时crontab提交上去了。同样的我写了一个小测试程序不管用system还是execl都是可以的.我已经折腾了一周实在没办法上来求助各位了,希望能得到的帮助。
我的环境是:
平台:HP-UX 11
编译器:aCC
使用Roguewave Thread.h++多线程

RWBoolean _regCron(const RWCString& type,
    const RWCString& group_name,
    const RWSlistCollectables& sw_info,
    const RWCString& time_info,
    const RWCString& uid,
    const RWSlistCollectables& check_time_info)
{
        RWCString crontab_path = AppServer::GetInstance()->;getCrontabPath();

        RWCString crontab_file = crontab_path + "/crontab.txt";
        RWCString script_file = crontab_path + "/script.sh";
        RWCString crontab_action = crontab_path + "/" + group_name + ".sh";

        FILE *fp_crontab = fopen(crontab_file.data(), "w+";
        FILE *fp_action = fopen(crontab_action.data(),"w+";
        FILE *fp_script = fopen(script_file.data(),"w+";

        RWBoolean ret = FALSE;
        if ( (fp_crontab==NULL) || (fp_action==NULL) || (fp_script==NULL))
        {
                if (fp_crontab == NULL)
                {
                        TRACE_LOG("@@ %s,%d-->;fopen(%s) failed, errno=%d",
                                        __FILE__, __LINE__, crontab_file.data(), errno);
                }
                if (fp_action == NULL)
                {
                        TRACE_LOG("@@ %s,%d-->;fopen(%s) failed, errno=%d",
                                        __FILE__, __LINE__, crontab_action.data(), errno);
                }
                if (fp_script == NULL)
                {
                        TRACE_LOG("@@ %s,%d-->;fopen(%s) failed, errno=%d",
                                        __FILE__, __LINE__, script_file.data(), errno);
                }
        }
        else
        {
                fprintf(fp_script,"#!/bin/sh\n";
                fprintf(fp_script,"crontab %s\n",crontab_file.data());
                int cron_num = check_time_info.entries();
                for (int i=0;i<cron_num;++i)
                {
                        RWSlistCollectables *pList = (RWSlistCollectables*)check_time_info.at(i);
                        RWCString check_time_ = *((RWCollectableString*)pList->;at(0));
                        RWCString group_name_ = *((RWCollectableString*)pList->;at(1));
                        fprintf(fp_crontab,"%s * %s/%s.sh\n",check_time_.data(),
                                        crontab_path.data(),group_name_.data());
                }

                ret = TRUE;
                fclose(fp_crontab);
                fclose(fp_action);
                fclose(fp_script);

                //以下修改script.sh权限,加上可执行权限
                struct stat statbuf;
                if (stat(script_file.data(),&statbuf)<0)
                {
                        TRACE("## %s,%d-->;Failed to stat file",
                                        __FILE__, __LINE__);
                }
                else
                {
                        if (chmod(script_file.data(),statbuf.st_mode|S_IXUSR)<0)
                        {
                                TRACE("## %s,%d-->;Failed to chmod file",
                                                __FILE__, __LINE__);
                        }
                }

                if (stat(crontab_action.data(),&statbuf)<0)
                {
                        TRACE("## %s,%d-->;Failed to stat file",
                                        __FILE__, __LINE__);
                }
                else
                {
                        if (chmod(crontab_action.data(),statbuf.st_mode|S_IXUSR)<0)
                        {
                                TRACE("## %s,%d-->;Failed to chmod file",
                                                __FILE__, __LINE__);
                        }
                        else
                        {
                                RWCString cmd = script_file;

                                int child_pid_ = fork();
                                int statval;
                                if (child_pid_ < 0)
                                {
                                        TRACE("@@ %s,%d-->;fork() failed, errno=%d",
                                                        __FILE__, __LINE__, errno);
                                        return FALSE;
                                }
                                else if (child_pid_ >; 0)
                                {        // parent process
                                        TRACE("## %s,%d-->;parent pid=%d fork child pid=%d\n",
                                                        __FILE__, __LINE__, getpid(), child_pid_);
                                        return TRUE;
                                }
                                else
                                {                            // child process
                                        TRACE("## %s,%d-->;child process pid=%d\ncmd=%s",
                                                        __FILE__, __LINE__,getpid(),cmd.data());

                                        if (execl(cmd.data(), cmd.data(), 0) == -1)
                                                //Important!!!!!!这里提交script.sh脚本
                                                //脚本的内容为:
                                                // #!/sh/bin
                                                // crontab crontab.txt
                                                //奇怪的是这里execl执行成功了,但是crontab没有提交
                                        {
                                                TRACE_LOG("@@ %s,%d-->;child_pid[%d], execlp(%s) failed, errno=%d",
                                                                __FILE__, __LINE__, getpid(), cmd.data(), errno);
                                                return FALSE;
                                        }
                                        exit(0);
                                }
                        }
                }
        }
        return ret;
}

论坛徽章:
0
2 [报告]
发表于 2004-06-11 22:00 |只看该作者

[HELP!]Unix下程序提交crontab的问题

  1. crontab crontab.txt
复制代码


HP 下是这么提交CRONTAB 的吗?

能找到你的CRONTAB.TXT 吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP