Home > OS >  bash script logging setup
bash script logging setup

Time:08-25

I have a script:

   #!/bin/bash
    gb=1
    ps aux | awk '{print $2 "\t\t" $6/1024 " MB\t\t" $11}' | while IFS=\n read PROCESS; do
    MEMORY=$( echo $PROCESS | awk '{print $2}' | cut -d'.' -f 1 )
    if [[ $MEMORY -gt $gb ]]
    then
    echo $PROCESS | grep  apache 
    pid=$(echo $PROCESS | grep apache | awk '{print $1}')
    kill $pid > /dev/null 2>&1
    fi
    done

it removes apache processes that are greater than the value specified in the "gb" variable

I need the script to log: the end date of the process, its pid and the username to which the process belonged.

How can the script be modified?

CodePudding user response:

Since I'm not interested in nuking processes on my own machine, that part is not tested, but something like this might be a good start:

#!/bin/sh

gb=1

ps aux | grep [a]pache | awk -vgb=$gb '
BEGIN {
      printf("%-16s  %8s  END-DATE\n", "USER", "PID");
}

{
    if ($6 < gb * 1024 * 1024)
       next;

    system("kill " $2)

    # Give the process 10s to terminate
    for (i = 0; i < 10; i  ) {
        if (system("kill -0 "$2)) {
           printf("%-16s  %8u  %s\n", $1, $2, strftime());
           next;
        }

        system("sleep 1");
    }

    printf("%-16s  %8u  DID-NOT-TERMINATE\n", $1, $2);
}'
  • Related