隨筆-109  評(píng)論-187  文章-25  trackbacks-0
            2011年6月19日
          利用免費(fèi)的英語(yǔ)角把英語(yǔ)練好

          北京  也樂(lè)英語(yǔ)為了滿足廣大英語(yǔ)愛(ài)好者的需要特推出周末免費(fèi)英語(yǔ)角服務(wù),

          北京英語(yǔ)角的組織形式如下:

              1:由也樂(lè)英語(yǔ)派出一名外教和一名助理負(fù)責(zé)組織英語(yǔ)角的活動(dòng)。

              2: 英語(yǔ)角每周組織一次活動(dòng),也樂(lè)英語(yǔ)培訓(xùn)學(xué)校提供一間教室為大家的活動(dòng)場(chǎng)所。

              3:英語(yǔ)愛(ài)好者可以免費(fèi)參加英語(yǔ)角的活動(dòng),不收取任何費(fèi)用,此活動(dòng)是公益活動(dòng),也樂(lè)英

          語(yǔ)不收取任何費(fèi)用,也不限制參加次數(shù)。

              4:也樂(lè)英語(yǔ)免費(fèi)提供給英語(yǔ)愛(ài)好者茶水、咖啡、以及活動(dòng)所采用的書(shū)籍報(bào)紙。

              5:每周一到2個(gè)話題,由外教提前一周告訴大家,大家可以簡(jiǎn)單準(zhǔn)備,以便在課堂上
                  跟外教以及同學(xué)交流。
             
              6:外教會(huì)糾正大家的發(fā)音、語(yǔ)法、詞匯上的錯(cuò)誤,會(huì)形成一些總結(jié),也希望大家能夠暢所

          欲言,大膽的說(shuō)英語(yǔ)。

               7:所有參加英語(yǔ)角的愛(ài)好者,請(qǐng)您在交流期間把手機(jī)調(diào)為靜音。

               也樂(lè)英語(yǔ)地址:北京豐臺(tái)區(qū)馬家堡西路15號(hào) 時(shí)代風(fēng)帆大廈2區(qū)1901
               交通狀況:地鐵四號(hào)線角門(mén)西站A口上樓即可。 51、501、54、529、698、646、707 嘉園

          二里東門(mén)下車(chē)
               聯(lián)系電話:010-58423871  15330275871

                此活動(dòng)由于報(bào)名數(shù)量眾多,所以需要大家提前預(yù)約。
                也樂(lè)英語(yǔ)網(wǎng)站:www.yellenglish.com
                也樂(lè)英語(yǔ) 爭(zhēng)做北京最好的英語(yǔ)角.
          posted @ 2011-06-19 09:35 小小程序程序員混口飯吃 閱讀(2137) | 評(píng)論 (0)編輯 收藏
            2009年4月22日
          我認(rèn)為最大的沖擊莫過(guò)于 惠普,oracle跟惠普的直接競(jìng)爭(zhēng)會(huì)加大,從合作變?yōu)楦?jìng)爭(zhēng),我認(rèn)為惠普如果不收購(gòu)redhat來(lái)對(duì)抗,未來(lái)肯定落下風(fēng)!
          posted @ 2009-04-22 09:56 小小程序程序員混口飯吃 閱讀(644) | 評(píng)論 (0)編輯 收藏
            2007年11月22日
               摘要: 上篇文章講述了jacorb 的配置,本章講敘其應(yīng)用,隨后的幾篇文章會(huì)重點(diǎn)講述corba的開(kāi)發(fā)   JACORB開(kāi)發(fā)以及corba的請(qǐng)求方式:    JacORB的應(yīng)用開(kāi)發(fā)一般分為以下五步: 1.寫(xiě)IDL接口定義 2.編譯IDL接口定義生成Java類(lèi) 3.實(shí)現(xiàn)步驟2中生成的接口 4.寫(xiě)服務(wù)器啟動(dòng)類(lèi),并注冊(cè)到ORB 5.寫(xiě)客戶端去獲取服務(wù)對(duì)象引用 &nb...  閱讀全文
          posted @ 2007-11-22 10:41 小小程序程序員混口飯吃 閱讀(8316) | 評(píng)論 (2)編輯 收藏
            2007年11月21日

                             how to setup jacorb dev env
          1:download JacORB_2_2

                 http://www.jacorb.org/download.html
            download ant
                 http://ant.apache.org/bindownload.cgi

          2:extact JacORB_2_2.jar to d:\JacORB_2_2

          3:setup sys environment

                 set ANT_HOME=
                 set JAVA_HOME=
                 set JACORB_HOME=d:\JacORB_2_2
                 set PATH=%PATH%;%ANT_HOME%\bin;%JAVA_HOME%\bin;%JACORB_HOME%\bin;
                 set CLASSPAHT=.;%CLASSPAHT%;%ANT_HOME%\lib\ant.jar;%JACORB_HOME%\lib\jarorb.jar;%JACORB_HOME%\lib\idl.jar\;%JACORB_HOME%\lib\logkit-1.2.jar

          4:rename %JACORB_HOME%\etc\jacorb_properties.template to %JACORB_HOME%\etc\jacorb.properties
            and modify the 50th line to 53th line to
           
                 #ORBInitRef.NameService=file:/y:/nsiona.ref
                
          ORBInitRef.NameService=file://d://test//NS_Ref
                
          #ORBInitRef.NameService=http://www.x.y.z/~user/NS_Ref
                
          #ORBInitRef.TradingService=http://www.x.y.z/~user/TraderRef
           
            modify 618th line to
                 jacorb.naming.ior_filename=d://test//NS_Ref

          5:rename  %JACORB_HOME%\jacotemplate.bat to %JACORB_HOME%\jaco.bat
           
            and modify related env variable
           
            rename   %JACORB_HOME%\idltemplate.bat to %JACORB_HOME%\idl.bat
            
            and modify related env variable

           

          6:  use ant compile and build idl and java


               cd  %JACORB_HOME%\demo\grid  

               run ant
             
               the generate class file in %JACORB_HOME%\classes  and generated java file in %JACORB_HOME%\demo\grid


          7: open a new cmd window:
                    cd %JACORB_HOME%   ns
           
             you can see the following result:   
                 [ configuration jacorb loaded from file %JAORB_HOME%\etc\jacorb.properties]

             open a new cmd window:
                    cd %JACORB_HOME%   jaco demo.grid.Server
            you can see the following result:   
            [ configuration jacorb loaded from file %JAORB_HOME%\etc\jacorb.properties]
            
            open a new cmd window:
                    cd %JACORB_HOME%   jaco demo.grid.client
              you can see the following result:   
           
            [ configuration jacorb loaded from file D:\work\nj\JACORB\etc\jacorb.properties]
             Height = 31
             Width = 14
             Old value at (30,13): 0.21
             Setting (30,13) to 470.11
             New value at (30,13): 470.11
             MyException, reason: This is only a test exception, no harm done :-)
             done.

          posted @ 2007-11-21 10:36 小小程序程序員混口飯吃 閱讀(4264) | 評(píng)論 (4)編輯 收藏
            2007年11月13日
           
          oracle的分析函數(shù)over 及開(kāi)窗函數(shù)
          一:分析函數(shù)over
          Oracle從8.1.6開(kāi)始提供分析函數(shù),分析函數(shù)用于計(jì)算基于組的某種聚合值,它和聚合函數(shù)的不同之處是
          對(duì)于每個(gè)組返回多行,而聚合函數(shù)對(duì)于每個(gè)組只返回一行。
          下面通過(guò)幾個(gè)例子來(lái)說(shuō)明其應(yīng)用。                                       
          1:統(tǒng)計(jì)某商店的營(yíng)業(yè)額。        
               date       sale
               1           20
               2           15
               3           14
               4           18
               5           30
              規(guī)則:按天統(tǒng)計(jì):每天都統(tǒng)計(jì)前面幾天的總額
              得到的結(jié)果:
              DATE   SALE       SUM
              ----- -------- ------
              1      20        20           --1天           
              2      15        35           --1天+2天           
              3      14        49           --1天+2天+3天           
              4      18        67            .          
              5      30        97            .
               
          2:統(tǒng)計(jì)各班成績(jī)第一名的同學(xué)信息
              NAME   CLASS S                         
              ----- ----- ----------------------
              fda    1      80                     
              ffd    1      78                     
              dss    1      95                     
              cfe    2      74                     
              gds    2      92                     
              gf     3      99                     
              ddd    3      99                     
              adf    3      45                     
              asdf   3      55                     
              3dd    3      78              
             
              通過(guò):   
              --
              select * from                                                                       
              (                                                                            
              select name,class,s,rank()over(partition by class order by s desc) mm from t2
              )                                                                            
              where mm=1
              --
              得到結(jié)果:
              NAME   CLASS S                       MM                                                                                        
              ----- ----- ---------------------- ----------------------
              dss    1      95                      1                      
              gds    2      92                      1                      
              gf     3      99                      1                      
              ddd    3      99                      1          
             
              注意:
              1.在求第一名成績(jī)的時(shí)候,不能用row_number(),因?yàn)槿绻嘤袃蓚€(gè)并列第一,row_number()只返回一個(gè)結(jié)果          
              2.rank()和dense_rank()的區(qū)別是:
                --rank()是跳躍排序,有兩個(gè)第二名時(shí)接下來(lái)就是第四名
                --dense_rank()l是連續(xù)排序,有兩個(gè)第二名時(shí)仍然跟著第三名
               
               
          3.分類(lèi)統(tǒng)計(jì) (并顯示信息)
              A   B   C                      
              -- -- ----------------------
              m   a   2                      
              n   a   3                      
              m   a   2                      
              n   b   2                      
              n   b   1                      
              x   b   3                      
              x   b   2                      
              x   b   4                      
              h   b   3
             select a,c,sum(c)over(partition by a) from t2                
             得到結(jié)果:
             A   B   C        SUM(C)OVER(PARTITIONBYA)      
             -- -- ------- ------------------------
             h   b   3        3                        
             m   a   2        4                        
             m   a   2        4                        
             n   a   3        6                        
             n   b   2        6                        
             n   b   1        6                        
             x   b   3        9                        
             x   b   2        9                        
             x   b   4        9                        
            
             如果用sum,group by 則只能得到
             A   SUM(C)                            
             -- ----------------------
             h   3                      
             m   4                      
             n   6                      
             x   9                      
             無(wú)法得到B列值       
            
          =====

          select * from test

          數(shù)據(jù):
          A B C
          1 1 1
          1 2 2
          1 3 3
          2 2 5
          3 4 6


          ---將B欄位值相同的對(duì)應(yīng)的C 欄位值加總
          select a,b,c, SUM(C) OVER (PARTITION BY B) C_Sum
          from test

          A B C C_SUM
          1 1 1 1
          1 2 2 7
          2 2 5 7
          1 3 3 3
          3 4 6 6



          ---如果不需要已某個(gè)欄位的值分割,那就要用 null

          eg: 就是將C的欄位值summary 放在每行后面

          select a,b,c, SUM(C) OVER (PARTITION BY null) C_Sum
          from test

          A B C C_SUM
          1 1 1 17
          1 2 2 17
          1 3 3 17
          2 2 5 17
          3 4 6 17

           

          求個(gè)人工資占部門(mén)工資的百分比

          SQL> select * from salary;

          NAME DEPT SAL
          ---------- ---- -----
          a 10 2000
          b 10 3000
          c 10 5000
          d 20 4000

          SQL> select name,dept,sal,sal*100/sum(sal) over(partition by dept) percent from salary;

          NAME DEPT SAL PERCENT
          ---------- ---- ----- ----------
          a 10 2000 20
          b 10 3000 30
          c 10 5000 50
          d 20 4000 100

          二:開(kāi)窗函數(shù)           
                開(kāi)窗函數(shù)指定了分析函數(shù)工作的數(shù)據(jù)窗口大小,這個(gè)數(shù)據(jù)窗口大小可能會(huì)隨著行的變化而變化,舉例如下:
          1:     
             over(order by salary) 按照salary排序進(jìn)行累計(jì),order by是個(gè)默認(rèn)的開(kāi)窗函數(shù)
             over(partition by deptno)按照部門(mén)分區(qū)
          2:
            over(order by salary range between 5 preceding and 5 following)
             每行對(duì)應(yīng)的數(shù)據(jù)窗口是之前行幅度值不超過(guò)5,之后行幅度值不超過(guò)5
             例如:對(duì)于以下列
               aa
               1
               2
               2
               2
               3
               4
               5
               6
               7
               9
             
             sum(aa)over(order by aa range between 2 preceding and 2 following)
             得出的結(jié)果是
                      AA                       SUM
                      ---------------------- -------------------------------------------------------
                      1                       10                                                      
                      2                       14                                                      
                      2                       14                                                      
                      2                       14                                                      
                      3                       18                                                      
                      4                       18                                                      
                      5                       22                                                      
                      6                       18                                                                
                      7                       22                                                                
                      9                       9                                                                 
                       
             就是說(shuō),對(duì)于aa=5的一行 ,sum為   5-1<=aa<=5+2 的和
             對(duì)于aa=2來(lái)說(shuō) ,sum=1+2+2+2+3+4=14     ;
             又如 對(duì)于aa=9 ,9-1<=aa<=9+2 只有9一個(gè)數(shù),所以sum=9    ;
                        
          3:其它:
               over(order by salary rows between 2 preceding and 4 following)
                    每行對(duì)應(yīng)的數(shù)據(jù)窗口是之前2行,之后4行
          4:下面三條語(yǔ)句等效:           
               over(order by salary rows between unbounded preceding and unbounded following)
                    每行對(duì)應(yīng)的數(shù)據(jù)窗口是從第一行到最后一行,等效:
               over(order by salary range between unbounded preceding and unbounded following)
                     等效
               over(partition by null)
          posted @ 2007-11-13 13:33 小小程序程序員混口飯吃 閱讀(50042) | 評(píng)論 (13)編輯 收藏
            2007年8月15日

          由于一些原因,最近要復(fù)習(xí)一些東西,所以就把JMS的東西再?gòu)?fù)習(xí)一遍,以下便是例子

          jms 中最重要的幾個(gè)概念destination,ACKNOWLEDGE,subscribe,durable subscribe

          destination:topic queque
            queue簡(jiǎn)單點(diǎn)說(shuō)就是1:1 一個(gè)消息只能由一個(gè)consumer去消費(fèi),別的consumer來(lái)消費(fèi)的時(shí)候已經(jīng)沒(méi)了,先到先得
          topic簡(jiǎn)單點(diǎn)說(shuō)就是1:N 一個(gè)消息可以由多個(gè)consumer來(lái)消費(fèi),誰(shuí)來(lái)消費(fèi)都有
           subscribe,拿topic來(lái)說(shuō)如果當(dāng)前訂閱不是持久訂閱,只有再訂閱后生產(chǎn)者生產(chǎn)得消息才能被consumer得到,持久訂閱只要沒(méi)有被consumer消費(fèi),早晚會(huì)消費(fèi)這個(gè)消息
           
           
           
           一下是幾個(gè)例子
           
           queuesend:queque消息產(chǎn)生
           queuereceive:queque消息得消費(fèi)
           topicsend :topic消息得產(chǎn)生
           topicreceive1:topic消息的非訂閱
           topicrecieve2:topic消息的持久訂閱
           
           這個(gè)例子實(shí)在WEBLOGIC814上測(cè)試過(guò)的,當(dāng)然要定義JMSSERVER,FACTORY,DESTINATION。
           
           
           
           QueueSend
           
           import java.io.BufferedReader;
          import java.io.IOException;
          import java.io.InputStreamReader;
          import java.util.Hashtable;

          import javax.jms.JMSException;
          import javax.jms.Queue;
          import javax.jms.QueueConnection;
          import javax.jms.QueueConnectionFactory;
          import javax.jms.QueueSender;
          import javax.jms.QueueSession;
          import javax.jms.Session;
          import javax.jms.TextMessage;
          import javax.naming.Context;
          import javax.naming.InitialContext;
          import javax.naming.NamingException;

          public class QueueSend {
           // Defines the JNDI context factory.
           public final static String JNDI_FACTORY = "weblogic.jndi.WLInitialContextFactory";

           // Defines the JNDI provider url.
           public final static String PROVIDER_URL = " t3://localhost:7001";

           // Defines the JMS connection factory for the queue.
           public final static String JMS_FACTORY = "SendJMSFactory";

           // Defines the queue.
           public final static String QUEUE = "SendJMSQueue";

           private QueueConnectionFactory qconFactory;

           private QueueConnection qcon;

           private QueueSession qsession;

           private QueueSender qsender;

           private Queue queue;

           private TextMessage msg;

           /**
            * Creates all the necessary objects for sending messages to a JMS queue.
            *
            * @param ctx
            *            JNDI initial context
            * @param queueName
            *            name of queue
            * @exception NamingException
            *                if operation cannot be performed
            * @exception JMSException
            *                if JMS fails to initialize due to internal error
            */
           public void init(Context ctx, String queueName) throws NamingException,
             JMSException {
            qconFactory = (QueueConnectionFactory) ctx.lookup(JMS_FACTORY);
            qcon = qconFactory.createQueueConnection();
            qsession = qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
            queue = (Queue) ctx.lookup(queueName);
            qsender = qsession.createSender(queue);
            msg = qsession.createTextMessage();
            qcon.start();
           }

           /**
            * Sends a message to a JMS queue.
            *
            * @param message
            *            message to be sent
            * @exception JMSException
            *                if JMS fails to send message due to internal error
            */
           public void send(String message) throws JMSException {
            msg.setText(message);
            qsender.send(msg);
           }

           /**
            * Closes JMS objects.
            *
            * @exception JMSException
            *                if JMS fails to close objects due to internal error
            */
           public void close() throws JMSException {
            qsender.close();
            qsession.close();
            qcon.close();
           }

           /**
            * main() method.
            *
            * @param args
            *            WebLogic Server URL
            * @exception Exception
            *                if operation fails
            */
           public static void main(String[] args) throws Exception {
            try {
             InitialContext ic = getInitialContext();
             QueueSend qs = new QueueSend();
             qs.init(ic, QUEUE);
             readAndSend(qs);
             qs.close();
            } catch (Exception e) {
             e.printStackTrace();
            }
           }

           private static void readAndSend(QueueSend qs) throws IOException,
             JMSException {
            BufferedReader msgStream = new BufferedReader(new InputStreamReader(
              System.in));
            String line = null;
            boolean quitNow = false;
            do {
             System.out.print("Enter message (\"quit\" to quit): ");
             line = msgStream.readLine();
             if (line != null && line.trim().length() != 0) {
              qs.send(line);
              System.out.println("JMS Message Sent: " + line + "\n");
              quitNow = line.equalsIgnoreCase("quit");
             }
            } while (!quitNow);

           }

           private static InitialContext getInitialContext() throws NamingException {
            Hashtable env = new Hashtable();
            env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);
            env.put(Context.PROVIDER_URL, PROVIDER_URL);
            return new InitialContext(env);
           }

          }


          QueueReceive

          import java.util.Hashtable;

          import javax.jms.JMSException;
          import javax.jms.Message;
          import javax.jms.MessageListener;
          import javax.jms.Queue;
          import javax.jms.QueueConnection;
          import javax.jms.QueueConnectionFactory;
          import javax.jms.QueueReceiver;
          import javax.jms.QueueSession;
          import javax.jms.Session;
          import javax.jms.TextMessage;
          import javax.naming.Context;
          import javax.naming.InitialContext;
          import javax.naming.NamingException;

          public class QueueReceive implements MessageListener {
           // Defines the JNDI context factory.
           public final static String JNDI_FACTORY = "weblogic.jndi.WLInitialContextFactory";

           // Defines the JNDI provider url.
           public final static String PROVIDER_URL = " t3://localhost:7001";

           // Defines the JMS connection factory for the queue.
           public final static String JMS_FACTORY = "SendJMSFactory";

           // Defines the queue.
           public final static String QUEUE = "SendJMSQueue";

           private QueueConnectionFactory qconFactory;

           private QueueConnection qcon;

           private QueueSession qsession;

           private QueueReceiver qreceiver;

           private Queue queue;

           private boolean quit = false;

           /**
            * Message listener interface.
            *
            * @param msg
            *            message
            */
           public void onMessage(Message msg) {
            try {
             String msgText;
             if (msg instanceof TextMessage) {
              msgText = ((TextMessage) msg).getText();
             } else {
              msgText = msg.toString();
             }

             System.out.println("Message Received: " + msgText);

          //   if (msgText.equalsIgnoreCase("123")) {
          //    synchronized (this) {
          //     quit = true;
          //     this.notifyAll(); // Notify main thread to quit
          //    }
          //   }
            } catch (JMSException jmse) {
             jmse.printStackTrace();
            }
           }

           /**
            * Creates all the necessary objects for receiving messages from a JMS
            * queue.
            *
            * @param ctx
            *            JNDI initial context
            * @param queueName
            *            name of queue
            * @exception NamingException
            *                if operation cannot be performed
            * @exception JMSException
            *                if JMS fails to initialize due to internal error
            */
           public void init(Context ctx, String queueName) throws NamingException,
             JMSException {
            qconFactory = (QueueConnectionFactory) ctx.lookup(JMS_FACTORY);
            qcon = qconFactory.createQueueConnection();
            qsession = qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
            queue = (Queue) ctx.lookup(queueName);
            qreceiver = qsession.createReceiver(queue);
            qreceiver.setMessageListener(this);
            qcon.start();
           }

           /**
            * Closes JMS objects.
            *
            * @exception JMSException
            *                if JMS fails to close objects due to internal error
            */
           public void close() throws JMSException {
            qreceiver.close();
            qsession.close();
            qcon.close();
           }

           /**
            * main() method.
            *
            * @param args
            *            WebLogic Server URL
            * @exception Exception
            *                if execution fails
            */

           public static void main(String[] args) throws Exception {

            InitialContext ic = getInitialContext();
            QueueReceive qr = new QueueReceive();
            qr.init(ic, QUEUE);

            System.out
              .println("JMS Ready To Receive Messages (To quit, send a \"quit\" message).");

            // Wait until a "quit" message has been received.
            synchronized (qr) {
             System.out.println("111111111111");
             while (!qr.quit) {
              try {
               System.out.println("2222222222");
               qr.wait();
               System.out.println("333333333");
              } catch (InterruptedException ie) {
              }
             }
            }
            qr.close();
           }

           private static InitialContext getInitialContext() throws NamingException {
            Hashtable env = new Hashtable();
            env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);
            env.put(Context.PROVIDER_URL, PROVIDER_URL);
            return new InitialContext(env);
           }

          }

           

          TopicSend

          import java.io.BufferedReader;
          import java.io.IOException;
          import java.io.InputStreamReader;
          import java.util.Hashtable;

          import javax.jms.JMSException;
          import javax.jms.Session;
          import javax.jms.TextMessage;
          import javax.jms.Topic;
          import javax.jms.TopicConnection;
          import javax.jms.TopicConnectionFactory;
          import javax.jms.TopicSession;
          import javax.naming.Context;
          import javax.naming.InitialContext;
          import javax.naming.NamingException;
          import javax.jms.TopicPublisher;
          public class TopicSend {
           // Defines the JNDI context factory.
           public final static String JNDI_FACTORY = "weblogic.jndi.WLInitialContextFactory";

           // Defines the JNDI provider url.
           public final static String PROVIDER_URL = " t3://localhost:7001";

           // Defines the JMS connection factory for the queue.
           public final static String JMS_FACTORY = "SendJMSFactory";

           // Defines the queue.
           public final static String TOPIC = "SendJMSTopic";

           private TopicConnectionFactory tconFactory;

           private TopicConnection tcon;

           private TopicSession tsession;

           private TopicPublisher tsender;

           private Topic topic;

           private TextMessage msg;
           public static InitialContext ic ;

           /**
            * Creates all the necessary objects for sending messages to a JMS queue.
            *
            * @param ctx
            *            JNDI initial context
            * @param queueName
            *            name of queue
            * @exception NamingException
            *                if operation cannot be performed
            * @exception JMSException
            *                if JMS fails to initialize due to internal error
            */
           public void init(Context ctx, String queueName) throws NamingException,
             JMSException {
            tconFactory = (TopicConnectionFactory) ctx.lookup(JMS_FACTORY);
            tcon = tconFactory.createTopicConnection();
            tsession = tcon.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
            System.out.println(topic);
            topic = (Topic) ctx.lookup(queueName);
            System.out.println(topic);
            tsender = tsession.createPublisher(topic);
            msg = tsession.createTextMessage();
            tcon.start();
           }

           /**
            * Sends a message to a JMS queue.
            *
            * @param message
            *            message to be sent
            * @exception JMSException
            *                if JMS fails to send message due to internal error
            */
           public void send(String message) throws JMSException ,NamingException{
            System.out.println(topic+"-----------");
            msg.setText(message);
            tsender.publish(msg);
           }

           /**
            * Closes JMS objects.
            *
            * @exception JMSException
            *                if JMS fails to close objects due to internal error
            */
           public void close() throws JMSException {
            tsender.close();
            tsession.close();
            tcon.close();
           }

           /**
            * main() method.
            *
            * @param args
            *            WebLogic Server URL
            * @exception Exception
            *                if operation fails
            */
           public static void main(String[] args) throws Exception {
            try {
             ic= getInitialContext();
             TopicSend ts = new TopicSend();
             ts.init(ic, TOPIC);
             readAndSend(ts);
             ts.close();
            } catch (Exception e) {
             e.printStackTrace();
            }
           }

           private static void readAndSend(TopicSend ts) throws IOException,
             JMSException,NamingException {
            BufferedReader msgStream = new BufferedReader(new InputStreamReader(
              System.in));
            String line = null;
            boolean quitNow = false;
            do {
             System.out.print("Enter message (\"quit\" to quit): ");
             line = msgStream.readLine();
             if (line != null && line.trim().length() != 0) {
              ts.send(line);
             
              System.out.println("JMS Message Sent: " + line + "\n");
              quitNow = line.equalsIgnoreCase("quit");
             }
            } while (!quitNow);

           }

           private static InitialContext getInitialContext() throws NamingException {
            Hashtable env = new Hashtable();
            env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);
            env.put(Context.PROVIDER_URL, PROVIDER_URL);
            return new InitialContext(env);
           }

          }

           

          TopicReceive1

          import java.util.Hashtable;

          import javax.jms.JMSException;
          import javax.jms.Message;
          import javax.jms.MessageListener;
          import javax.jms.Session;
          import javax.jms.TextMessage;
          import javax.jms.Topic;
          import javax.jms.TopicConnection;
          import javax.jms.TopicConnectionFactory;
          import javax.jms.TopicSession;
          import javax.jms.TopicSubscriber;
          import javax.naming.Context;
          import javax.naming.InitialContext;
          import javax.naming.NamingException;


          public class TopicReceive1 implements MessageListener {
           // Defines the JNDI context factory.
           public final static String JNDI_FACTORY = "weblogic.jndi.WLInitialContextFactory";

           // Defines the JNDI provider url.
           public final static String PROVIDER_URL = " t3://localhost:7001";

           // Defines the JMS connection factory for the queue.
           public final static String JMS_FACTORY = "SendJMSFactory";

           // Defines the queue.
           public final static String TOPIC = "SendJMSTopic";

           private TopicConnectionFactory tconFactory;

           private TopicConnection tcon;

           private TopicSession tsession;

           private TopicSubscriber tsubscriber;

           private Topic topic;

           private boolean quit = false;

           /**
            * Message listener interface.
            *
            * @param msg
            *            message
            */
           public void onMessage(Message msg) {
            System.out.println("===================");
            try {
             String msgText;
             if (msg instanceof TextMessage) {
              msgText = ((TextMessage) msg).getText();
             } else {
              msgText = msg.toString();
             }

             System.out.println("Message Received: " + msgText);

          //   if (msgText.equalsIgnoreCase("123")) {
          //    synchronized (this) {
          //     quit = true;
          //     this.notifyAll(); // Notify main thread to quit
          //    }
          //   }
            } catch (JMSException jmse) {
             jmse.printStackTrace();
            }
           }

           /**
            * Creates all the necessary objects for receiving messages from a JMS
            * queue.
            *
            * @param ctx
            *            JNDI initial context
            * @param queueName
            *            name of queue
            * @exception NamingException
            *                if operation cannot be performed
            * @exception JMSException
            *                if JMS fails to initialize due to internal error
            */
           public void init(Context ctx, String queueName) throws NamingException,
             JMSException {
            tconFactory = (TopicConnectionFactory) ctx.lookup(JMS_FACTORY);
            tcon = tconFactory.createTopicConnection();
            tsession = tcon.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
            topic = (Topic) ctx.lookup(queueName);
            tsubscriber = tsession.createSubscriber(topic);
            //System.out.println("12");
            //Message msg = treceiver.receive();
            //msg.acknowledge();
            //tsubscriber = tsession.createSubscriber(topic);Message msg = tsubscriber.receive();msg.acknowledge();
            //System.out.println(msg);
            tsubscriber.setMessageListener(this);
            tcon.start();
           }

           /**
            * Closes JMS objects.
            *
            * @exception JMSException
            *                if JMS fails to close objects due to internal error
            */
           public void close() throws JMSException {
            tsubscriber.close();
            tsession.close();
            tcon.close();
           }

           /**
            * main() method.
            *
            * @param args
            *            WebLogic Server URL
            * @exception Exception
            *                if execution fails
            */

           public static void main(String[] args) throws Exception {

            InitialContext ic = getInitialContext();
            TopicReceive1 tr1 = new TopicReceive1();
            tr1.init(ic, TOPIC);

            System.out
              .println("JMS Ready To Receive Messages (To quit, send a \"quit\" message).");
            
            

            // Wait until a "quit" message has been received.
          //  synchronized (tr1) {
          //   System.out.println("111111111111");
          //   while (!tr1.quit) {
          //    try {
          //     System.out.println("2222222222");
          //     tr1.wait();
          //     System.out.println("333333333");
          //    } catch (InterruptedException ie) {
          //    }
          //   }
          //  }
            tr1.close();
           }

           private static InitialContext getInitialContext() throws NamingException {
            Hashtable env = new Hashtable();
            env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);
            env.put(Context.PROVIDER_URL, PROVIDER_URL);
            return new InitialContext(env);
           }

          }


          TopicReceive2


          import java.util.Hashtable;

          import javax.jms.JMSException;
          import javax.jms.Session;
          import javax.jms.TextMessage;
          import javax.jms.Topic;
          import javax.jms.TopicConnection;
          import javax.jms.TopicConnectionFactory;
          import javax.jms.TopicSession;
          import javax.jms.TopicSubscriber;
          import javax.naming.Context;
          import javax.naming.InitialContext;
          import javax.naming.NamingException;


          public class TopicReceive2 {
           // Defines the JNDI context factory.
           public final static String JNDI_FACTORY = "weblogic.jndi.WLInitialContextFactory";

           // Defines the JNDI provider url.
           public final static String PROVIDER_URL = " t3://localhost:7001";

           // Defines the JMS connection factory for the queue.
           public final static String JMS_FACTORY = "SendJMSFactory";

           // Defines the queue.
           public final static String TOPIC = "SendJMSTopic";

           private TopicConnectionFactory tconFactory;

           private TopicConnection tcon;

           private TopicSession tsession;

           private TopicSubscriber tsubscriber;

           private Topic topic;

           private boolean quit = false;


           /**
            * Creates all the necessary objects for receiving messages from a JMS
            * queue.
            *
            * @param ctx
            *            JNDI initial context
            * @param queueName
            *            name of queue
            * @exception NamingException
            *                if operation cannot be performed
            * @exception JMSException
            *                if JMS fails to initialize due to internal error
            */
           public void init(Context ctx, String queueName) throws NamingException,
             JMSException,InterruptedException {
            tconFactory = (TopicConnectionFactory) ctx.lookup(JMS_FACTORY);
            tcon = tconFactory.createTopicConnection();
            tcon.setClientID("IP10.200.7.104");
            tcon.start();
            
            tsession = tcon.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
            System.out.println("333333333333");
            topic = (Topic) ctx.lookup(queueName);
            //tsubscriber = tsession.createSubscriber(topic);
            tsubscriber= tsession.createDurableSubscriber(topic,"88888");
             for (int i=0; i<3; i++) {
                       //
                       TextMessage message = (TextMessage) tsubscriber.receive();
                       System.out.println("message["+i+"]: " + message.getText());
                   }
                    Thread.sleep(10000);
            //System.out.println("12");
            //Message msg = treceiver.receive();
            //msg.acknowledge();
            //tsubscriber = tsession.createSubscriber(topic);Message msg = tsubscriber.receive();msg.acknowledge();
            //System.out.println(msg);

           }

           /**
            * Closes JMS objects.
            *
            * @exception JMSException
            *                if JMS fails to close objects due to internal error
            */
           public void close() throws JMSException {
            tsubscriber.close();
            tsession.close();
            tcon.close();
           }

           /**
            * main() method.
            *
            * @param args
            *            WebLogic Server URL
            * @exception Exception
            *                if execution fails
            */

           public static void main(String[] args) throws Exception {

            InitialContext ic = getInitialContext();
            TopicReceive2 tr2 = new TopicReceive2();
            tr2.init(ic, TOPIC);

            System.out
              .println("JMS Ready To Receive Messages (To quit, send a \"quit\" message).");
            
            

            // Wait until a "quit" message has been received.
          //  synchronized (tr1) {
          //   System.out.println("111111111111");
          //   while (!tr1.quit) {
          //    try {
          //     System.out.println("2222222222");
          //     tr1.wait();
          //     System.out.println("333333333");
          //    } catch (InterruptedException ie) {
          //    }
          //   }
          //  }
            tr2.close();
           }

           private static InitialContext getInitialContext() throws NamingException {
            Hashtable env = new Hashtable();
            env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);
            env.put(Context.PROVIDER_URL, PROVIDER_URL);
            return new InitialContext(env);
           }

          }

          posted @ 2007-08-15 09:20 小小程序程序員混口飯吃 閱讀(1175) | 評(píng)論 (0)編輯 收藏
            2007年8月10日

          一、rpm包安裝方式步驟:
          引用:

          1、找到相應(yīng)的軟件包,比如soft.version.rpm,下載到本機(jī)某個(gè)目錄;

          2、打開(kāi)一個(gè)終端,su -成root用戶;

          3、cd soft.version.rpm所在的目錄;

          4、輸入rpm -ivh soft.version.rpm




          二、deb包安裝方式步驟:

          引用:
          1、找到相應(yīng)的軟件包,比如soft.version.deb,下載到本機(jī)某個(gè)目錄;

          2、打開(kāi)一個(gè)終端,su -成root用戶;

          3、cd soft.version.deb所在的目錄;

          4、輸入dpkg -i soft.version.deb




          三、tar.gz源代碼包安裝方式:

          引用:
          1、找到相應(yīng)的軟件包,比如soft.tar.gz,下載到本機(jī)某個(gè)目錄;

          2、打開(kāi)一個(gè)終端,su -成root用戶;

          3、cd soft.tar.gz所在的目錄;

          4、tar -xzvf soft.tar.gz //一般會(huì)生成一個(gè)soft目錄

          5、cd soft

          6、./configure

          7、make

          8、make install




          四、tar.bz2源代碼包安裝方式:

          引用:
          1、找到相應(yīng)的軟件包,比如soft.tar.bz2,下載到本機(jī)某個(gè)目錄;

          2、打開(kāi)一個(gè)終端,su -成root用戶;

          3、cd soft.tar.bz2所在的目錄;

          4、tar -xjvf soft.tar.bz2 //一般會(huì)生成一個(gè)soft目錄

          5、cd soft

          6、./configure

          7、make

          8、make install




          五、apt方式安裝:

          引用:
          1、打開(kāi)一個(gè)終端,su -成root用戶;

          2、apt-cache search soft 注:soft是你要找的軟件的名稱或相關(guān)信息

          3、如果2中找到了軟件soft.version,則用apt-get install soft.version命令安裝軟件 注:只要你可以上網(wǎng),只需要用apt-cache search查找軟件,用apt-get install軟件




          六、bin文件安裝:

          如果你下載到的軟件名是soft.bin,一般情況下是個(gè)可執(zhí)行文件,安裝方法如下:

          引用:
          1、打開(kāi)一個(gè)終端,su -成root用戶;

          2、chmod +x soft.bin

          3、./soft.bin //運(yùn)行這個(gè)命令就可以安裝軟件了




          七、不需要安裝的軟件:

          有了些軟件,比如lumaqq,是不需要安裝的,自帶jre解壓縮后可直接運(yùn)行。假設(shè)下載的是lumaqq.tar.gz,使用方法如下:

          引用:
          1、打開(kāi)一個(gè)終端,su -成root用戶;

          2、tar -xzvf lumaqq.tar.gz //這一步會(huì)生成一個(gè)叫LumaQQ的目錄

          3、cd LumaQQ

          4、chmod +x lumaqq //設(shè)置lumaqq這個(gè)程序文件為可運(yùn)行

          5、此時(shí)就可以運(yùn)行l(wèi)umaqq了,用命令./lumaqq即可,但每次運(yùn)行要輸入全路徑或切換到剛才生成的LumaQQ目錄里

          6、為了保證不設(shè)置路徑就可以用,你可以在/bin目錄下建立一個(gè)lumaqq的鏈接,用命令ln -s lumaqq /bin/ 即可,以后任何時(shí)候打開(kāi)一個(gè)終端輸入lumaqq就可以啟動(dòng)QQ聊天軟件了

          7、如果你要想lumaqq有個(gè)菜單項(xiàng),使用菜單編輯工具,比如Alacarte Menu Editor,找到上面生成的LumaQQ目錄里的lumaqq設(shè)置一個(gè)菜單項(xiàng)就可以了,當(dāng)然你也可以直接到 /usr/share/applications目錄,按照里面其它*.desktop文件的格式生成一個(gè)自己的desktop文件即可。

          posted @ 2007-08-10 09:39 小小程序程序員混口飯吃 閱讀(626) | 評(píng)論 (0)編輯 收藏
            2007年7月24日

          計(jì)劃任務(wù)工具 cron 的配置和說(shuō)明

          作者:北南南北
          來(lái)自:LinuxSir.Org
          摘要:Linux操作系統(tǒng)中,計(jì)劃任務(wù)通常由cron來(lái)承擔(dān),了解或掌握cron,能為我們管理服務(wù)器帶來(lái)更多的便利,也能省卻更多的時(shí)間。本文也舉了一些簡(jiǎn)單明了的例子,為了讓新手上路方便;

          目錄


          ++++++++++++++++++++++++++++++++++++++
          正文
          ++++++++++++++++++++++++++++++++++++++


          1、計(jì)劃任務(wù)概說(shuō);

          計(jì)劃任務(wù),是任務(wù)在約定的時(shí)間執(zhí)行已經(jīng)計(jì)劃好的工作,這是表面的意思。在Linux中,我們經(jīng)常用到 crond 服務(wù)器來(lái)完成這項(xiàng)工作。cron服務(wù)器可以根據(jù)配置文件約定的時(shí)間來(lái)執(zhí)行特定的作務(wù)。比如我們可以在配置文件中約定每天早上4點(diǎn),對(duì)httpd 服務(wù)器重新啟動(dòng),這就是一個(gè)計(jì)劃任務(wù);

          下面我們先來(lái)說(shuō)說(shuō)cron;


          2、cron;

          在Linux系統(tǒng)中,計(jì)劃任務(wù)一般是由cron承擔(dān),我們可以把cron設(shè)置為開(kāi)機(jī)時(shí)自動(dòng)啟動(dòng)。cron啟動(dòng)后,它會(huì)讀取它的所有配置文件(全局性配置文件/etc/crontab,以及每個(gè)用戶的計(jì)劃任務(wù)配置文件),然后cron會(huì)根據(jù)命令和執(zhí)行時(shí)間來(lái)按時(shí)來(lái)調(diào)用度工作任務(wù)。


          2.1 cron 的安裝和啟動(dòng);

          在一般情況下,cron都是系統(tǒng)默認(rèn)安裝的,我們要學(xué)會(huì)查看軟件包是否已經(jīng)安裝;


          2.1.1 在Redhat 或 Fedora等RPM包管理的系統(tǒng)的安裝;

          判斷系統(tǒng)是否已經(jīng)安裝cron相關(guān)的包

          Fedora 5.0 系統(tǒng)的情況;

          其它版本的Fedora及Redhat的系統(tǒng)和這相似;

          [root@localhost ~]# rpm -qa |grep cron
          vixie-cron-4.1-54.FC5
          anacron-2.3-36.1
          crontabs-1.10-7.1

           

          其中vixie-cron軟件包是cron的主程序,您可以通過(guò)下面的命令來(lái)了解它,其它軟件包同理;

          [root@localhost beinan]# rpm -ql vixie-cron

           

          crontabs 軟件包是用來(lái)安裝、卸裝、或列舉用來(lái)驅(qū)動(dòng) cron 守護(hù)進(jìn)程的表格的程序。cron 守護(hù)進(jìn)程檢查 crontab 文件來(lái)查看某個(gè)指定命令被調(diào)度執(zhí)行的時(shí)間。如果命令已經(jīng)調(diào)度,守護(hù)進(jìn)程就會(huì)執(zhí)行它們。了解crontabs軟件包都安裝了些什么,應(yīng)該用下面的命令;

          [root@localhost beinan]# rpm -ql crontabs

           

          如果沒(méi)有安裝,可以從光盤(pán)中找出文件名帶有cron字樣的軟件包來(lái)安裝。

          [root@localhost ~]# rpm -ivh vixie-cron-4.1-54.FC5*
          [root@localhost ~]# rpm -ivh crontabs*

           

          也可以用yum 來(lái)在線安裝;

          [root@localhost ~]# yum install vixie-cron
          [root@localhost ~]# yum install crontabs

           


          2.1.2 在Slackware系統(tǒng)中的安裝;

          在Slackware中cron軟件包是 dcron,您可以在光盤(pán)中找出來(lái)安裝它;

          查看是否已經(jīng)安裝了dcron軟件包,您可以這樣查看。在這里能列出軟件包詳細(xì)的安裝情況;

          [root@localhost ~]# more /var/adm/packages/dcron*

           

          如果沒(méi)有安裝,請(qǐng)用下面的命令來(lái)安裝。在第一張安裝盤(pán)中找出dcron軟件包;

          [root@localhost ~]# installpkg dcron*.tgz

           


          2.1.3 cron 的開(kāi)啟、停止、重新啟動(dòng)方法;

          cron配置文件被修改后,想讓新文件生效,必須重新crond服務(wù)器,有兩種方法可供選擇;


          第一種 在Fedora或Redhat 等以RPM包管理的系統(tǒng)中;

          [root@localhost ~]# /etc/init.d/crond start
          [root@localhost ~]# /etc/init.d/crond stop
          [root@localhost ~]# /etc/init.d/crond restart

           

          如果想在Fedora 和 Redhat 或以這些發(fā)行版為基礎(chǔ)克隆的發(fā)行版,如果想自動(dòng)開(kāi)機(jī)運(yùn)行,請(qǐng)用下面的辦法;

          [root@localhost ~]# chkconfig --levels 35 crond on

           

          第二種:通用

          [root@localhost ~]# pgrep crond 注:判斷crond 是否在運(yùn)行;
          [root@localhost ~]# pkill crond 注:殺掉正在運(yùn)行中的crond;
          [root@localhost ~]# pgrep crond 注:查看是否被殺掉了;
          [root@localhost ~]# /usr/sbin/crond 注:運(yùn)行crond;

           


          2.2 cron 配置文件;

          cron 是一個(gè)服務(wù)器程序,我們都知道Linux的服務(wù)器的配置,大多是通過(guò)配置文件來(lái)完成的,cron自然也不例外,在Redhat/Fedora 等系統(tǒng)中它的全局性配置文件是/etc/crontab;在Slackware系統(tǒng)中,全局性文件是/var/spool/cron/crontabs/root 。每個(gè)用戶也有自己的cron配置文件,我們可以通過(guò)crontab -e 來(lái)編輯它;


          2.2.1 全局性配置文件;

          下面是一個(gè)全局性的配置文件例子,以Fedora Core 5為例;

          [root@localhost ~]# more /etc/crontab
          SHELL=/bin/bash
          PATH=/sbin:/bin:/usr/sbin:/usr/bin
          MAILTO=root
          HOME=/
          # run-parts
          1 * * * * root run-parts /etc/cron.hourly
          #
          2 4 * * * root run-parts /etc/cron.daily
          #
          22 4 * * 7 root run-parts /etc/cron.weekly
          #
          42 4 1 * * root run-parts /etc/cron.monthly
          #
          0,5,10,15,20,25,30,35,40,45,50,55 * * * * root /usr/bin/mrtg /etc/mrtg/mrtg.cfg

           

          對(duì)于全局性配置文件,我們要用root權(quán)限來(lái)更改,一般是通過(guò)crontab -e 來(lái)修改。但有時(shí)也并不一定是這樣的,比如Fedora Core 5 如果通過(guò)crontab -e 修改的是root用戶的cron 配置文件。所以我們要在Fedora Core 5中修改全局性配置文件可以用vi 編輯器來(lái)修改。vi的用法請(qǐng)參考:《文件編輯器 vi》

          在全局性配置文件中,定義了可執(zhí)行命令的路徑環(huán)境變量,所用SHELL類(lèi)型的定義等,這些大多不用修改;我們經(jīng)常添加的是計(jì)劃任務(wù)或修改任務(wù)執(zhí)行的時(shí)間等;

          在全局性配置文件中,我們發(fā)現(xiàn)有類(lèi)似這些行;

          1 * * * * root run-parts /etc/cron.hourly 注:表示每個(gè)小時(shí)的第一分鐘,開(kāi)始執(zhí)行/etc/hourly目錄下的可執(zhí)行程序或腳本;
          2 4 * * * root run-parts /etc/cron.daily 注:表示每天的4點(diǎn)2分,開(kāi)始執(zhí)行/etc/cron.daily目錄下的可執(zhí)行程序或腳本;
          22 4 * * 7 root run-parts /etc/cron.weekly 注:每年第7個(gè)周4點(diǎn)我22分,開(kāi)始執(zhí)行 /etc/cron.weekly目錄下的可執(zhí)行程序或腳本;
          42 4 1 * * root run-parts /etc/cron.monthly 注:每月第1天的4點(diǎn)42分,開(kāi)始執(zhí)行/etc/cron.monthly目錄下的可執(zhí)行程序或腳本;

           

          這些行是用來(lái)在同一時(shí)間批量執(zhí)行任務(wù)的,我們?cè)谝院蟮睦又歇?dú)立出來(lái)解說(shuō),在這里只是讓大家心中有數(shù);


          2.2.2 cron 配置計(jì)劃任務(wù)的書(shū)寫(xiě)格式

          分鐘 小時(shí) 日 月 周 [用戶名] 命令

           

          說(shuō)明:

          第一段應(yīng)該定義的是:分鐘,表示每個(gè)小時(shí)的第幾分鐘來(lái)執(zhí)行。范圍是從0-59
                  第二段應(yīng)該定義的是:小時(shí),表示從第幾個(gè)小時(shí)來(lái)執(zhí)行,范圍是從0-23
                  第三段應(yīng)該定義的是:日期,表示從每個(gè)月的第幾天執(zhí)行,范圍從1-31
                  第四段應(yīng)該定義的是:月,表示每年的第幾個(gè)月來(lái)執(zhí)行,范圍從1-12
                  第五段應(yīng)該定義的是:周,表示每周的第幾天執(zhí)行,范圍從0-6,其中 0表示星期日。
                  每六段應(yīng)該定義的是:用戶名,也就是執(zhí)行程序要通過(guò)哪個(gè)用戶來(lái)執(zhí)行,這個(gè)一般可以省略;
                  第七段應(yīng)該定義的是:執(zhí)行的命令和參數(shù)。
                  

          注:其中用戶名可是省略,用戶名定義的是程序用哪個(gè)用戶來(lái)執(zhí)行,比如mysql服務(wù)器,我們可以定義成以mysql用戶來(lái)啟動(dòng)、停止、重新啟動(dòng),這時(shí)要寫(xiě)上用戶名;不過(guò)對(duì)于cron來(lái)說(shuō)意義不是太大,因?yàn)槊總€(gè)用戶都有自己的cron配置文件。有些程序的啟動(dòng)必須用到root用戶,這時(shí)我們就可以修改root用戶的cron配置文件就行了。在每個(gè)用戶的配置文件中,不必指定用戶名。

          我們可以把計(jì)劃任務(wù)寫(xiě)在全局性配置文件中,如果您想把一個(gè)計(jì)劃放入全局性配置文件中,就得改發(fā)行版所對(duì)應(yīng)的cron全局配置文件,比如Fedora 5的全局性配置文件是/etc/crontab文件;

          每個(gè)用戶也能定義自己的cron配置文件,用crontab -e 命令來(lái)定義;

          舉一例:讓機(jī)器在每天8點(diǎn)30分重新啟動(dòng);

          關(guān)于時(shí)間格式中有7個(gè)字段。我們可以直接更改或者添加,當(dāng)然這是系統(tǒng)任務(wù)調(diào)用。舉個(gè)例子,比如我在每天的早上8點(diǎn)30分重新啟動(dòng)機(jī)器,就可以在
          /etc/crontab中加入下面的兩句,第一句就是注釋了。以#號(hào)開(kāi)始,后面寫(xiě)一個(gè)自己能知道這是什么任務(wù)的備注;

          # reboot OS
          30 8 * * * root /sbin/reboot

           

          第一段應(yīng)該定義的是:分鐘,表示每個(gè)小時(shí)的第幾分鐘來(lái)執(zhí)行。范圍是從0-59
          第二段應(yīng)該定義的是:小時(shí),表示從第幾個(gè)小時(shí)來(lái)執(zhí)行,范圍是從0-23
          第三段應(yīng)該定義的是:日期,表示從每個(gè)月的第幾天執(zhí)行,范圍從1-31
          第四段應(yīng)該定義的是:月,表示每年的第幾個(gè)月來(lái)執(zhí)行,范圍從1-12
          第五段應(yīng)該定義的是:周,表示每周的第幾天執(zhí)行,范圍從0-6,其中 0表示星期日。
          每六段應(yīng)該定義的是:用戶名,也就是執(zhí)行程序要通過(guò)哪個(gè)用戶來(lái)執(zhí)行,這個(gè)一般可以省略;
          第七段應(yīng)該定義的是:執(zhí)行的命令和參數(shù)。

          對(duì)比上面的例子就知道,30是不是分鐘??8是不是小時(shí)?如果有*代表的地方,表示全部,也就是說(shuō),每個(gè)月,每天,每星期都要執(zhí)行。root 表示用root用戶執(zhí)行,命令是/sbin/reboot ,也就是說(shuō),系統(tǒng)在每天 8點(diǎn)30分重新啟動(dòng);

          我們可以把每天8點(diǎn)30分重新啟動(dòng)的計(jì)劃任務(wù)寫(xiě)入cron全局性配置文件中,也可以定義在root用戶自己的cron配置文件中。如果定義在root自己的配置文件,請(qǐng)用root身份來(lái)執(zhí)行 crontab -e 來(lái)修改配置文件;crontab -e 進(jìn)入修改配置文件的過(guò)程,其實(shí)和vi的用法一樣,請(qǐng)參看vi 的用法:《文件編輯器 vi》

          讓配置文件生效:如果讓配置文件生效,還得重新啟動(dòng)cron,切記,既然每個(gè)用戶下的cron配置文件修改后。也要重新啟動(dòng)cron服務(wù)器。

          在Fedora 和Redhat中,我們應(yīng)該用;

          [root@localhost ~]# /etc/init.d/crond restart

           

          如果讓crond 在開(kāi)機(jī)時(shí)運(yùn)行,應(yīng)該改變其運(yùn)行級(jí)別;

          [root@localhost ~]# chkconfig --levels 35 crond on

           

          在Slackware中,如果開(kāi)機(jī)自動(dòng)運(yùn)行;

          查看/etc/rc.d/rc.M文件是否有如的行,如果沒(méi)有就加上,大多是有的;

          # Start crond (Dillon's crond):
          if [ -x /usr/sbin/crond ]; then
            /usr/sbin/crond -l10 >>/var/log/cron 2>&1
          </cdoe>
          <b>
          如果想讓立即讓cron重啟生效,也可以用下面的辦法;
          </b>
          <code>
          [root@localhost ~]# pgrep crond 注:查看crond服務(wù)器是否運(yùn)行;
          2022
          [root@localhost ~]# pkill crond 注:殺死crond;
          [root@localhost ~]# pgrep crond 注:查看crond是否退出;
          [root@localhost ~]# /usr/sbin/crond 注:?jiǎn)?dòng)crond;
          [root@localhost ~]# pgrep crond 注:查看crond 是否已經(jīng)運(yùn)行得起來(lái)了;
          3883

           


          2.2.3 關(guān)于同一時(shí)間,同時(shí)執(zhí)行多個(gè)任務(wù)的定義方法;

          我們?cè)谇懊嬉呀?jīng)說(shuō)過(guò),在全局性配置文件中,有類(lèi)似如下的段落;

          1 * * * * root run-parts /etc/cron.hourly 注:表示每個(gè)小時(shí)的第一分鐘,開(kāi)始執(zhí)行/etc/hourly目錄下的可執(zhí)行程序或腳本;
          2 4 * * * root run-parts /etc/cron.daily 注:表示每天的4點(diǎn)2分,開(kāi)始執(zhí)行/etc/cron.daily目錄下的可執(zhí)行程序或腳本;
          22 4 * * 7 root run-parts /etc/cron.weekly 注:每年第7個(gè)周4點(diǎn)我22分,開(kāi)始執(zhí)行 /etc/cron.weekly目錄下的可執(zhí)行程序或腳本;
          42 4 1 * * root run-parts /etc/cron.monthly 注:每月第1天的4點(diǎn)42分,開(kāi)始執(zhí)行/etc/cron.monthly目錄下的可執(zhí)行程序或腳本;

           

          舉例來(lái)說(shuō),我想在每天5點(diǎn)10分來(lái)重新啟動(dòng)httpd 服務(wù)器,與此同時(shí),我們也可以同時(shí)下載一個(gè)ISO文件。如果我們按書(shū)寫(xiě)計(jì)劃任務(wù)的規(guī)則一條一條的來(lái)書(shū)寫(xiě),并添加到全局是有點(diǎn)麻煩。不如寫(xiě)一個(gè)腳本放在/etc/crond.daily目錄中。然后把其權(quán)限設(shè)置為755 (關(guān)于權(quán)限的設(shè)置,請(qǐng)參考:《Linux 文件和目錄的屬性》)。

          當(dāng)然我們得改一改上面的 帶有/etc/cron.daily那行,改為如下;

          10 5 * * * root run-parts /etc/cron.daily
          </cdoe>
          然后我們到/etc/crond.daily目錄中創(chuàng)建兩個(gè)文件,一個(gè)是用來(lái)重啟httpd服務(wù)器的,如下;
          <code>
          [root@localhost cron.daily]# touch httpd.sh
          [root@localhost cron.daily]# chmod 755 httpd.sh
          [root@localhost cron.daily]# echo "/etc/init.d/httpd restart" > httpd.sh
          [root@localhost cron.daily]# more httpd.sh
          /etc/init.d/httpd restart

           

          如果我想在每天5點(diǎn)20分下載FC5的鏡像,可以再創(chuàng)建一個(gè)文件fc5down.sh

          [root@localhost cron.daily]# touch fc5down.sh
          [root@localhost cron.daily]# chmod 755 fc5down.sh
          [root@localhost cron.daily]# echo "/usr/bin/wget http://mirrors.kernel.org/fedora/core/5/i386/iso/FC-5-i386-DVD.iso" > fc5down.sh
          [root@localhost cron.daily]# more fc5down.sh
          /usr/bin/wget http://mirrors.kernel.org/fedora/core/5/i386/iso/FC-5-i386-DVD.iso

           

          然后我們重新啟動(dòng)一下crond就行了;

          [root@localhost cron.daily]# pkill crond
          [root@localhost cron.daily]# prep crond
          [root@localhost cron.daily]# crond&

           

          注意:我只是想說(shuō)明一下,在同一時(shí)間 執(zhí)行多個(gè)計(jì)劃任務(wù)的簡(jiǎn)單用法,并不是有意教給您每天早上都下載FC5的映像。我舉這個(gè)例子是為了初學(xué)者了解這個(gè)功能。如果您有好多的任務(wù)在某一時(shí)刻執(zhí)行,那就自己寫(xiě)腳本文件。放在/etc目錄下的cron.hourly 、cron.daily 、cron.weekly 、cron.monthly 目錄中。凡是放進(jìn)這些目錄的可執(zhí)行腳本,都能在約定的時(shí)間內(nèi)準(zhǔn)確執(zhí)行。每個(gè)目錄有每個(gè)目錄的用途;


          2.2.4 對(duì)于用戶自身的cron 配置文件的說(shuō)明;

          每個(gè)用戶都有自己的cron配置文件,通過(guò)crontab -e 就可以編輯,一般的情況下,在Fedora和Redhat的發(fā)行版,我們編輯好用戶的cron配置文件保存退出后,系統(tǒng)會(huì)自動(dòng)就存放于/var/spool/cron/目錄中,文件以用戶名命名。在Slackware中是位于/var/spool/cron/crontabs/目錄中。其它的發(fā)行版都差不多,有點(diǎn)類(lèi)似。自己找找吧;查看用戶的計(jì)劃任務(wù)是crontab -l

          crontab -e 注:編輯用戶的cron配置文件;
          crontab -l 注:查看用戶的計(jì)劃任務(wù);

           

          比如我用beinan用戶來(lái)運(yùn)行crontab -e ;

          [beinan@localhost ~]$ id 注:判斷所用用戶身份;
          uid=500(beinan) gid=500(beinan) groups=500(beinan)
          [beinan@localhost ~]$ crontab -e 注:編輯用戶beinan的計(jì)劃任務(wù);

           

          我們?cè)诶锩娑x一個(gè)任務(wù);

          40 20 * * * /usr/bin/wget http://mirrors.kernel.org/fedora/core/5/i386/iso/FC-5-i386-DVD.iso

           

          保存退出后,我們用下面的命令來(lái)查看beinan用戶的計(jì)劃任務(wù);

          [beinan@localhost ~]$ crontab -l
          40 20 * * * /usr/bin/wget http://mirrors.kernel.org/fedora/core/5/i386/iso/FC-5-i386-DVD.iso

           

          配置好后,我們還要重新啟動(dòng)crond服務(wù)器,每個(gè)用戶cron配置文件的改動(dòng)都得重新啟動(dòng)crond服務(wù)器;前面已經(jīng)說(shuō)過(guò)了,這里省略;值得注意的是重啟crond服務(wù)器,需要root權(quán)限,您可以用su命令切換到root 用戶,然后再來(lái)重啟crond;


          在Fedora或Redhat等以RPM包管理的發(fā)行版中;

          [beinan@localhost ~]$ su
          口令:
          [root@localhost beinan]# /etc/init.d/crond restart
          停止 crond: [確定]
          啟動(dòng) crond: [確定]

           


          也可以先殺死crond,再運(yùn)行crond命令的辦法來(lái)啟動(dòng);

          [root@localhost beinan]# pkill crond
          [root@localhost beinan]# pgrep crond
          [root@localhost beinan]# /usr/sbin/crond
          [root@localhost beinan]# pgrep crond
          6664

           


          3、計(jì)劃任務(wù)的應(yīng)用范圍;

          計(jì)劃任務(wù)主要是讓系統(tǒng)自動(dòng)完成一些工作。比如我們可以讓系統(tǒng)自動(dòng)在某一時(shí)刻清理或備份httpd服務(wù)器的日志,然后重新啟動(dòng)httpd服務(wù)器,這對(duì)網(wǎng)絡(luò)管理員來(lái)說(shuō)是很重要的。也可以讓系統(tǒng)自動(dòng)清空位于/tmp目錄的垃圾文件。

          另外值得一提的是,LinuxSir.Org 有很多子站,每個(gè)子站都有RSS,能讓這些站點(diǎn)的RSS相互投遞,也是用cron來(lái)完成,比如是在早上4點(diǎn)左右開(kāi)始執(zhí)行這個(gè)任務(wù)。這是一個(gè)極為耗費(fèi)資源的過(guò)程,如果不是放在在線人少的時(shí)候,基本無(wú)法完成,所以只能放在早上進(jìn)行。作為SIR的管理員,不可能每天早上4點(diǎn)起來(lái)點(diǎn)鼠標(biāo)來(lái)完成這些事吧。所以最好的辦法就是通過(guò)cron來(lái)自動(dòng)運(yùn)行,以在服務(wù)器最清閑的時(shí)候來(lái)完成這項(xiàng)工作;

          posted @ 2007-07-24 11:14 小小程序程序員混口飯吃 閱讀(946) | 評(píng)論 (0)編輯 收藏
          分辨率設(shè)置高了X起來(lái)后花屏,無(wú)法通過(guò)X界面恢復(fù)回去,只能用普通用戶進(jìn)來(lái)后,su 到root上來(lái)找到XORG.CONF   文件

          修改/etc/X11/xorg.conf 

          screen里面的設(shè)置最大的那個(gè)去掉就好了,重啟就可以了
          posted @ 2007-07-24 09:19 小小程序程序員混口飯吃 閱讀(2606) | 評(píng)論 (2)編輯 收藏
            2007年7月17日

          一、注銷(xiāo),關(guān)機(jī),重啟

            注銷(xiāo)系統(tǒng)的logout命令

            1,Logout 注銷(xiāo)是登陸的相對(duì)操作,登陸系統(tǒng)后,若要離開(kāi)系統(tǒng),用戶只要直接下達(dá)logout命令即可:

            [root@localhost root]#logout

            Red Hat Linuxrelease 9(Shike)

            Kernel 2.4.20.8 on an i686

            Login: ← 回到登陸的畫(huà)面

            2,關(guān)機(jī)或重新啟動(dòng)的shutdown命令

            Shutdown命令可以關(guān)閉所有程序,依照用戶的需要,重新啟動(dòng)或關(guān)機(jī)。

            參數(shù)說(shuō)明如下:

            ? 立即關(guān)機(jī):-h 參數(shù)讓系統(tǒng)立即關(guān)機(jī)。范例如下:

            [root@localhost root]#shutdown –h now ← 要求系統(tǒng)立即關(guān)機(jī)

            ? 指定關(guān)機(jī)時(shí)間:time參數(shù)可指定關(guān)機(jī)的時(shí)間;或設(shè)置多久時(shí)間后運(yùn)行shutdown命令,范例如下:

            [root@localhost root]#shutdown now ← 立刻關(guān)機(jī)

            [root@localhost root]#shutdown +5 ← 5分鐘后關(guān)機(jī)

            [root@localhost root]#shutdown 10:30 ← 在10:30時(shí)關(guān)機(jī)

            ? 關(guān)機(jī)后自動(dòng)重啟:-r 參數(shù)設(shè)置關(guān)機(jī)后重新啟動(dòng)。范例如下:

            [root@localhost root]#shutdown -r now ← 立刻關(guān)閉系統(tǒng)并重啟

            [root@localhost root]#shutdown -r 23:59 ← 指定在23:59時(shí)重啟動(dòng)

            3,重新啟動(dòng)計(jì)算機(jī)的reboot命令

            顧名思義,reboot命令是用來(lái)重新啟動(dòng)系統(tǒng)的。常用的參數(shù)如下:

            ? -f 參數(shù):不依正常的程序運(yùn)行關(guān)機(jī),直接關(guān)閉系統(tǒng)并重新啟動(dòng)計(jì)算機(jī)。

            ? -I 參數(shù):在在重新啟動(dòng)之前關(guān)閉所有網(wǎng)絡(luò)接口。

            雖然reboot命令有個(gè)參數(shù)可以使用,但是一般只需要單獨(dú)運(yùn)行reboot命令就可以了

          posted @ 2007-07-17 13:27 小小程序程序員混口飯吃 閱讀(16107) | 評(píng)論 (0)編輯 收藏
          僅列出標(biāo)題  下一頁(yè)
          主站蜘蛛池模板: 泰顺县| 彰武县| 泸西县| 廊坊市| 新乡县| 镇雄县| 休宁县| 湘乡市| 蕉岭县| 灌阳县| 浠水县| 新邵县| 商丘市| 方正县| 江陵县| 夏邑县| 宁乡县| 高淳县| 肥乡县| 五常市| 贵阳市| 武汉市| 沙河市| 沅江市| 恭城| 如皋市| 晴隆县| 广西| 松江区| 洞口县| 泾川县| 洪洞县| 汉寿县| 中方县| 会东县| 盈江县| 五华县| 双柏县| 广汉市| 乳山市| 乌恰县|