Sponsored Content
Top Forums Shell Programming and Scripting How to make parallel processing rather than serial processing ?? Post 302445451 by Samb95 on Monday 16th of August 2010 03:56:07 AM
Old 08-16-2010
How to make parallel processing rather than serial processing ??

Hello everybody,

I have a little problem with one of my program. I made a plugin for collectd (a stats collector for my servers) but I have a problem to make it run in parallel.

My program gathers stats from logs, so it needs to run in background waiting for any new lines added in the log files.

My problem is that I call my program in a bash script that tails my log files, like this :
Code:
#!/bin/bash
(tail -f /home/collectd/logs/file1 | perl /home/collectd/etc/collection.pl file1 arg2) &
(tail -f /home/collectd/logs/file2 | perl /home/collectd/etc/collection.pl file2 arg2) &
(tail -f /home/collectd/logs/file3 | perl /home/collectd/etc/collection.pl file3 arg2) &
(tail -f /home/collectd/logs/file4 | perl /home/collectd/etc/collection.pl file4 arg2) &
(tail -f /home/collectd/logs/file5 | perl /home/collectd/etc/collection.pl file5 arg2) &
while [1 -eq 1]; do
  sleep 50;
done

The problem is that it does not work very well. So I would like to make the "tail -f" parallel processing directly in my perl program.
Here is the perl program (collection.pl) I'd like to make parallel processing with :
Code:
#!/usr/bin/perl

use warnings;
use strict;

if ($#ARGV != 1){
    print "You did not give the two necessary arguments.\nUsage: perl my_prog.pl filename VOP\n";
    exit;
}

#name of the file
my $file_name=$ARGV[0];
#Summary type that I want to analyze
my $sum_type=$ARGV[1];

my $node_name;
my $operation_type;
my $operation_counter;

chomp($sum_type, $file_name);

my $previous_fh = select(STDOUT);
$| = 1;
select($previous_fh);

while (<STDIN>){
    chomp;

    #I use regular expressions here to retrieve the name of the server the type of operation and the counter value only if the summary type is VOP
    if (/\s$sum_type\sSUMMARY\s\[(\w+)\.\w+\]\s(\w+)\scnt\/(\d+)\s/) {
        $server_name=$1;
        $operation_type=$2;
        $operation_counter=$3;
        my $timestamp=time;

        #This is a print so that collectd (a program that I use to monitor my servers) can put a value in a RRD file from the print output
        print "PUTVAL $node_name/cvfs-$file_name/operations-$operation_type $timestamp:$operation_counter";
    }
}

I have seen that parallel processing could be done with fork or something like that but I don't really understand how to do it. Does anyone has an idea of how I could do that ?

Thanks by advance.

Last edited by Samb95; 08-16-2010 at 05:32 AM..
 

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

How to do parallel processing??

Hi All, I am working on solaris 8 sparc machine with 2 cpu. I am trying to run my application which generates files. I run multiple instance of the application, but the results don't seem to show as if it were runing parallely. When i run the application once it takes 12 secs to generate a... (1 Reply)
Discussion started by: zing
1 Replies

2. Shell Programming and Scripting

parallel processing

Hi I want to run two shell script files parallely. These two scripts are interacting with the database. can any body help on this Pls Regards Audippa naidu.M (3 Replies)
Discussion started by: audippa
3 Replies

3. Shell Programming and Scripting

Need Help With Parallel Processing

Hi I am looking for some kind of feature in unix that will help me write a script that can invoke multiple processes in parallel. And make sure that the multiple parallel processes complete successfully before I proceed to the next step. Someone suggested something called timespid or... (6 Replies)
Discussion started by: imnewtothis23
6 Replies

4. Shell Programming and Scripting

parallel processing

hi i am preparing a set of batches for a set of files sequentially There is a folder /xyz where all the files reside now all the files starting with 01 - will be appended for one below other to form a batch batch01 then all the files starting with 02 - will be appended for one below other to... (7 Replies)
Discussion started by: mad_man12
7 Replies

5. Programming

Algorithms for Parallel Processing

Hey, I just wanted to know how many algorithms there are that cannot be accelerated by parallel processing. I know one such algorithm is Euclid's Algorithm (for GCF). does anyone know any other algorithms that cannot be accelerated by pp? if so please list the names and a general sentence of what... (2 Replies)
Discussion started by: azar.zorn
2 Replies

6. Shell Programming and Scripting

PARALLEL PROCESSING IN PERL

HI All, I have scenerio where I need to call sub modules through for loop for (i=0; i<30 ;i++) { .. .. .. subroutine 1; subroutine 2; } I want this to be run in parallel process1 { ... ... subroutine 1; subroutine 2; (0 Replies)
Discussion started by: gvk25
0 Replies

7. Programming

Parallel processing pthread

Need urgent help on thread: the goal here is the separtemask will take each image and separate different contours and for each contour in the image it will call handleobject thread. So every for loop will call the handeobject thread. However, object index variable needs to be passed in each... (0 Replies)
Discussion started by: temursalin
0 Replies

8. Shell Programming and Scripting

Implement parallel processing

Unix OS : Linux 2.6x Shell type : Korn Hi all , This is a requirement to incorporate parallel processing of a Unix code . I have two pieces of unix code , one of which will act as a parent process . This script will invoke multiple ( say four ) instances of the second script at one go... (13 Replies)
Discussion started by: kumarjt
13 Replies

9. Shell Programming and Scripting

Parallel processing - continued

Hi, I am taking up the cue from where I was left in my earlier post ( link given below ) https://www.unix.com/shell-programming-scripting/231107-implement-parallel-processing.html I actually wanted to know the significance of using the Unix "wait" , which returns the control from background to... (3 Replies)
Discussion started by: kumarjt
3 Replies

10. Shell Programming and Scripting

Parallel processing

I have 10,000 + files, each of which I need to zip using bzip2. Is ti possible to use bash to create 8 parallel streams sending a new file to be processed from the list when one of the others has finished? (1 Reply)
Discussion started by: garethsays
1 Replies
COLLECTD(1)							     collectd							       COLLECTD(1)

NAME
collectd - System statistics collection daemon SYNOPSIS
collectd [options] DESCRIPTION
collectd is a daemon that receives system statistics and makes them available in a number of ways. The main daemon itself doesn't have any real functionality apart from loading, querying and submitting to plugins. For a description of available plugins please see "PLUGINS" below. OPTIONS
Most of collectd's configuration is done using using a configfile. See collectd.conf(5) for an in-depth description of all options. -C <config-file> Specify an alternative config file. This is the place to go when you wish to change collectd's behavior. The path may be relative to the current working directory. -t Test the configuration only. The program immediately exits after parsing the config file. A return code not equal to zero indicates an error. -T Test the plugin read callbacks only. The program immediately exits after invoking the read callbacks once. A return code not equal to zero indicates an error. -P <pid-file> Specify an alternative pid file. This overwrites any settings in the config file. This is thought for init-scripts that require the PID-file in a certain directory to work correctly. For everyday-usage use the PIDFile config-option. -f Don't fork to the background. collectd will also not close standard file descriptors, detach from the session nor write a pid file. This is mainly thought for 'supervising' init replacements such as runit. -h Output usage information and exit. PLUGINS
As noted above, the real power of collectd lies within it's plugins. A (hopefully complete) list of plugins and short descriptions can be found in the README file that is distributed with the sourcecode. If you're using a package it's a good bet to search somewhere near /usr/share/doc/collectd. There are two big groups of plugins, input and output plugins: o Input plugins are queried periodically. They somehow acquire the current value of whatever they where designed to work with and submit these values back to the daemon, i. e. they "dispatch" the values. As an example, the "cpu plugin" reads the current cpu-counters of time spent in the various modes (user, system, nice, ...) and dispatches these counters to the daemon. o Output plugins get the dispatched values from the daemon and does something with them. Common applications are writing to RRD-files, CSV-files or sending the data over a network link to a remote box. Of course not all plugins fit neatly into one of the two above categories. The "network plugin", for example, is able to send (i. e. "write") and receive (i. e. "dispatch") values. Also, it opens a socket upon initialization and dispatches the values when it receives them and isn't triggered at the same time the input plugins are being read. You can think of the network receive part as working asynchronous if it helps. In addition to the above, there are "logging plugins". Right now those are the "logfile plugin" and the "syslog plugin". With these plugins collectd can provide information about issues and significant situations to the user. Several loglevels let you suppress uninteresting messages. Starting with version 4.3.0 collectd has support for monitoring. This is done by checking thresholds defined by the user. If a value is out of range, a notification will be dispatched to "notification plugins". See collectd.conf(5) for more detailed information about threshold checking. Please note that some plugins, that provide other means of communicating with the daemon, have manpages of their own to describe their functionality in more detail. In particular those are collectd-email(5), collectd-exec(5), collectd-perl(5), collectd-snmp(5), and collectd-unixsock(5) SIGNALS
collectd accepts the following signals: SIGINT, SIGTERM These signals cause collectd to shut down all plugins and terminate. SIGUSR1 This signal causes collectd to signal all plugins to flush data from internal caches. E. g. the "rrdtool plugin" will write all pending data to the RRD files. This is the same as using the "FLUSH -1" command of the "unixsock plugin". SEE ALSO
collectd.conf(5), collectd-email(5), collectd-exec(5), collectd-perl(5), collectd-snmp(5), collectd-unixsock(5), types.db(5), <http://collectd.org/> AUTHOR
Florian Forster <octo@verplant.org> 5.1.0 2012-04-02 COLLECTD(1)
All times are GMT -4. The time now is 03:51 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy