I'm trying to match (and ultimately kill) a specific set of processes
that are "old".  In this specific case, I'm looking for rsync daemons
that started more than a week ago, but this is a more generic problem.

Here's the current process list (note that this is the same command
cf-agent runs to dump the process table:

      [beckerjes@host ~]$ ps -eo 
user,pid,ppid,pgid,pcpu,pmem,vsz,pri,rss,nlwp,stime,time,args | grep '[r]sync 
--daemon'
      root      2527  4647  2527  0.0  0.0  71888  10  1188    1 Feb16 00:00:00 
rsync --daemon
      root      2672  4647  2672  0.0  0.0  71888  10  1188    1 Feb16 00:00:00 
rsync --daemon
      root      3997  4647  3997  0.0  0.0  71888  10  1188    1 Feb23 00:00:00 
rsync --daemon
      root      4842  4647  4842  0.0  0.0  71888  10  1188    1 Feb23 00:00:00 
rsync --daemon
      root      6370  4647  6370  0.0  0.0  71888  10  1196    1 Feb09 00:00:00 
rsync --daemon
      root      8166  4647  8166  0.0  0.0  71888  10  1188    1 Feb09 00:00:00 
rsync --daemon
      root     18552  4647 18552  0.0  0.0  71888  10  1192    1 Jan25 00:00:00 
rsync --daemon
      root     18583  4647 18583  0.0  0.0  71888  10  1184    1 Jan25 00:00:00 
rsync --daemon
      root     23609  4647 23609  0.0  0.0  71888  10  1188    1 Mar01 00:00:00 
rsync --daemon

Here is the bundle:


      bundle agent rsync_snipe {
      vars:
          'rsync_age_days' string => '7';

      processes:
              'rsync'
                         #signals => { 'term', 'kill' },
                  process_select => find_old_rsync("${rsync_age_days}"); # Time 
in days.
      }

      body process_select find_old_rsync(age) {
                 command => '^rsync --daemon$';
             stime_range => irange(0,ago(0,0,${age},0,0,0));
          process_result => 'stime_range.command';
      }


And here is the relevant output from cf-agent -v:


      cf3> *****************************************************************
      cf3> BUNDLE rsync_snipe
      cf3> *****************************************************************
      cf3>
      cf3>    =========================================================
      cf3>    vars in bundle rsync_snipe (1)
      cf3>    =========================================================
      cf3>
      cf3>      +  Private classes augmented:
      cf3>      -  Private classes diminished:
      cf3>
      cf3>    =========================================================
      cf3>    processes in bundle rsync_snipe (1)
      cf3>    =========================================================
      cf3>
      cf3> Observe process table with /bin/ps -eo 
user,pid,ppid,pgid,pcpu,pmem,vsz,pri,rss,nlwp,stime,time,args
      cf3>
      cf3>     .........................................................
      cf3>     Promise handle:
      cf3>     Promise made by: rsync
      cf3>     .........................................................
      cf3>
      cf3> Selection filter matched absolute STIME/START = Feb16 in 
[0,1333553767]
      cf3> Selection filter matched absolute STIME/START = Feb16 in 
[0,1333553767]
      cf3> Selection filter matched absolute STIME/START = Feb23 in 
[0,1333553767]
      cf3> Selection filter matched absolute STIME/START = Feb23 in 
[0,1333553767]
      cf3> Selection filter matched absolute STIME/START = Feb09 in 
[0,1333553767]
      cf3> Selection filter matched absolute STIME/START = Feb09 in 
[0,1333553767]
      cf3> Selection filter matched absolute STIME/START = Jan25 in 
[0,1333553767]
      cf3> Selection filter matched absolute STIME/START = Jan25 in 
[0,1333553767]
      cf3> Selection filter matched absolute STIME/START = Mar01 in 
[0,1333553767]
      cf3>  -> No restart promised for rsync
      cf3>




Now, if I remove the stime_range check in the process_select bundle to
be:

      body process_select find_old_rsync(age) {
                 command => '^rsync --daemon*$';
             stime_range => irange(0,ago(0,0,45,0,0,0));
          process_result => 'command';
      }


The output is much closer to what I expect:

      cf3>    =========================================================
      cf3>    processes in bundle rsync_snipe (1)
      cf3>    =========================================================
      cf3>
      cf3> Observe process table with /bin/ps -eo 
user,pid,ppid,pgid,pcpu,pmem,vsz,pri,rss,nlwp,stime,time,args
      cf3>
      cf3>     .........................................................
      cf3>     Promise handle:
      cf3>     Promise made by: rsync
      cf3>     .........................................................
      cf3>
      cf3> Selection filter matched absolute STIME/START = Feb16 in 
[0,1330271365]
      cf3>  !! Matched: root      2527  4647  2527  0.0  0.0  71888  10 1188    
1 Feb16 00:00:00 rsync --daemon
      cf3>  ->  Found matching pid 2527
           (root      2527  4647  2527  0.0  0.0  71888  10  1188    1 Feb16 
00:00:00 rsync --daemon)
      cf3> Selection filter matched absolute STIME/START = Feb16 in 
[0,1330271365]
      cf3>  !! Matched: root      2672  4647  2672  0.0  0.0  71888  10 1188    
1 Feb16 00:00:00 rsync --daemon
      cf3>  ->  Found matching pid 2672
           (root      2672  4647  2672  0.0  0.0  71888  10  1188    1 Feb16 
00:00:00 rsync --daemon)
      [etc]



Other checks in process_result, such as "pid" appear to work correctly.

Am I doing something really wrong here with regards to what stime_range
wants for input, or could this be a bug?  The reference guide is pretty
thin on what exactly the input numbers for stime_range (and ttime_rante)
are for.  The range appears to be absolute epoch time, but that's not
completely clear.



-- 
Jesse Becker
NHGRI Linux support (Digicon Contractor)
:(){ :&:};:
_______________________________________________
Help-cfengine mailing list
Help-cfengine@cfengine.org
https://cfengine.org/mailman/listinfo/help-cfengine

Reply via email to