#!/bin/sh # Monitor process CPU use. # Run this from the crontab. # -Ian! D. Allen - idallen@idallen.ca - www.idallen.com PATH=/bin:/usr/bin ; export PATH umask 022 # F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND #100 0 1 0 8 0 1412 80 do_sel S ? 0:04 init #040 0 2 1 9 0 0 0 contex SW ? 0:00 keventd pscmd="ps uww" ps caxglww | awk ' BEGIN { # Exempt reports for certain user processes. # timep[ [ ] ] = # timep["acroread"] = 9 timep["accounts-daemon"] = 199 timep["acpid"] = 99 timep["adb"] = 99 timep["apcupsd"] = 99 timep["apache2"] = 99 timep["arc_reclaim 0"] = 99 timep["arc_prune 0"] = 99 timep["ata/0 0"] = 29 timep["ata/1 0"] = 29 timep["ata/2 0"] = 29 timep["ata/3 0"] = 29 timep["ata_sff/3 0"] = 29 timep["atopacctd 0"] = 99 timep["astropulse_4.36"] = 99999 timep["astropulse_4.36"] = 99999 timep["astropulse_5.00"] = 99999 timep["astropulse_5.03"] = 99999 timep["astropulse_5.06"] = 99999 timep["apt-check"] = 99 timep["at-spi-registry"] = 199 timep["at-spi2-registr"] = 199 timep["atd"] = 9 timep["atop"] = 9 timep["avidemux2_gtk"] = 99 timep["auserver"] = 9 timep["avahi-daemon"] = 49 timep["BackupPC"] = 9 timep["BackupPC_dump"] = 199 timep["BackupPC_trashC"] = 99 timep["bamfdaemon"] = 19 timep["bash"] = 99 timep["badblocks 0"] = 399 timep["beam.smp"] = 799 timep["bdi-default 0"] = 99 timep["beagled"] = 299 timep["beagled-helper"] = 599 timep["bittorrent"] = 399 timep["bittorrent-curs"] = 399 timep["boinc"] = 599 timep["boinc_3.20_i686"] = 299 timep["boinc_4.13_i686"] = 299 timep["boinc_client"] = 2199 timep["bonnie++"] = 199 timep["btlaunchmanycur"] = 999 timep["btrfs-endio-met"] = 599 timep["btrfs-endio-wri"] = 199 timep["btrfs-worker-1"] = 199 timep["btrfs-worker-2"] = 199 timep["btrfs-worker-3"] = 199 timep["bttrack.py"] = 9 timep["bzip2"] = 1999 timep["canonical-livep"] = 19 timep["cat"] = 19 timep["cgrulesengd"] = 99 timep["chrome"] = 99 timep["clock-applet"] = 99 timep["compiz"] = 199 timep["compiz.real"] = 199 timep["conntrackd 0"] = 99 timep["colord"] = 99 timep["console-kit-dae 0"] = 199 timep["cpufreq-applet"] = 99 timep["cron"] = 19 timep["cupsd"] = 99 timep["cups-browsed"] = 99 timep["dbus-daemon"] = 299 timep["dbu_evict 0"] = 99 timep["dd 0"] = 99 timep["ddclient 0"] = 19 timep["deja-dup-monito"] = 19 timep["desktopcouch-se"] = 59 timep["devkit-disks-da"] = 19 timep["dhcdbd 0"] = 99 timep["diff"] = 9 timep["Discord"] = 199 timep["docker"] = 19 timep["dosexec"] = 99 timep["dropbox"] = 99 timep["empathy"] = 2999 timep["espeak-synthesi"] = 99 timep["Eterm"] = 99 timep["etherape 0"] = 99 timep["etherape.real 0"] = 99 timep["events/1 0"] = 59 timep["events/0 0"] = 59 timep["evince"] = 19 timep["find 0"] = 9 timep["firefox"] = 1099 timep["firefox-bin"] = 799 timep["file://"] = 99 timep["flush-8:0"] = 19 timep["flush-8:32"] = 19 timep["flush-8:16"] = 19 timep["flush-8:48"] = 19 timep["flush-8:64"] = 19 timep["flush-9:126"] = 19 timep["gaim"] = 29 timep["GeckoMain"] = 1999 timep["gconfd-2"] = 19 timep["gdm-simple-gree"] = 19 timep["gftp-gtk"] = 29 timep["gfs2_scand"] = 29 timep["gizmo"] = 299 timep["gkrellm"] = 499 timep["glipper"] = 59 timep["gqrx"] = 999 timep["gnome-cups-icon"] = 99 timep["gnome-keyring-d"] = 19 timep["gnome-panel"] = 59 timep["gnome-screensav"] = 19 timep["gnome-shell"] = 99 timep["gnome-terminal"] = 99 timep["gnome-settings-"] = 99 timep["gnome-session-b"] = 29 timep["gnome-power-man"] = 29 timep["glances"] = 39 timep["GoogleTalkPlugi"] = 399 timep["gnuplot"] = 39 timep["gpartedbin"] = 39 timep["gsd-color"] = 199 timep["gsd-housekeepin"] = 99 timep["gsd-media-keys"] = 99 timep["gvfsd-trash"] = 39 timep["gvfs-udisks2-vo"] = 39 timep["hadsm3mh_6.03_i"] = 99999 timep["hadsm3mh_um_6.0"] = 99999 timep["hadsm3_um_6.08_"] = 99999 timep["hadsm3_6.08_i68"] = 99999 timep["hald"] = 99 timep["hald-addon-stor"] = 59 timep["haveged"] = 199 timep["hostd-worker"] = 59 timep["ifplugd 0"] = 9 timep["ibus-daemon"] = 99 timep["ibus-engine-sim"] = 99 timep["ibus-ui-gtk3"] = 19 timep["ibus-x11"] = 99 timep["indicator-appli"] = 199 timep["indicator-apple"] = 29 timep["indicator-datet"] = 29 timep["indicator-messa"] = 99 timep["indicator-sound"] = 99 timep["indicator-sessi"] = 99 timep["init"] = 19 timep["iotop"] = 99 timep["irqbalance"] = 99 timep["iscsid"] = 29 timep["java 122"] = 499 timep["java"] = 499 timep["java_vm"] = 299 timep["jbd2/dm-0-8"] = 199 timep["jbd2/sda1-8"] = 199 timep["jbd2/sda2-8"] = 199 timep["jbd2/sdb1-8"] = 199 timep["jbd2/sdb2-8"] = 199 timep["jbd2/sdd1-8"] = 199 timep["jbd2/sde1-8"] = 199 timep["jbd2/sdf1-8"] = 199 timep["jbd2/sdg1-8"] = 199 timep["jbd2/sdh1-8"] = 199 timep["john"] = 99999 timep["kblockd/0 0"] = 199 timep["kblockd/1 0"] = 199 timep["kblockd/2 0"] = 199 timep["kblockd/3 0"] = 199 timep["kcompactd0 0"] = 399 timep["khugepaged 0"] = 299 timep["kjournald 0"] = 99 timep["kjournald2 0"] = 99 timep["klogd"] = 9 timep["kondemand/0 0"] = 59 timep["kondemand/1 0"] = 59 timep["kondemand/2 0"] = 59 timep["kondemand/3 0"] = 59 timep["ksoftirqd/0 0"] = 699 timep["ksoftirqd/1 0"] = 299 timep["ksoftirqd/2 0"] = 299 timep["ksoftirqd/3 0"] = 299 timep["ksoftirqd/4 0"] = 299 timep["ksoftirqd/5 0"] = 299 timep["ksoftirqd/6 0"] = 299 timep["ksoftirqd/7 0"] = 299 timep["kswapd 0"] = 1999 timep["kswapd0 0"] = 1999 timep["kswapd1 0"] = 1999 timep["kthreadd 0"] = 1999 timep["kworker/0:0 0"] = 99 timep["kworker/0:0H 0"] = 99 timep["kworker/0:1 0"] = 99 timep["kworker/0:2 0"] = 99 timep["kworker/1:0 0"] = 99 timep["kworker/1:0H"] = 99 timep["kworker/1:1 0"] = 99 timep["kworker/1:1H 0"] = 99 timep["kworker/1:3H 0"] = 99 timep["kworker/1:2 0"] = 99 timep["kworker/1:2H 0"] = 99 timep["kworker/2:0 0"] = 99 timep["kworker/2:0H 0"] = 99 timep["kworker/2:1 0"] = 99 timep["kworker/2:1H 0"] = 99 timep["kworker/2:2 0"] = 99 timep["kworker/2:2H 0"] = 99 timep["kworker/2:3H 0"] = 99 timep["kworker/2:3 0"] = 99 timep["kworker/3:0 0"] = 99 timep["kworker/3:1 0"] = 99 timep["kworker/3:1H 0"] = 99 timep["kworker/3:2 0"] = 99 timep["kworker/5:1H-kblockd 0"] = 99 timep["kworker/0:1H 0"] = 99 timep["kworker/u8:3 0"] = 99 timep["kworker/u8:1 0"] = 99 timep["kworker/u8:2 0"] = 99 timep["kworker/u12:0-events_unbound 0"] = 99 timep["kworker/u16:0+flush-8:128 0"] = 99 timep["kworker/u16:0+flush-8:96 0"] = 99 timep["kworker/u16:0-events_power_efficient 0"] = 99 timep["kworker/u16:1+flush-8:96 0"] = 99 timep["kworker/u16:1-events_power_efficient 0"] = 99 timep["kworker/u16:1-events_unbound 0"] = 99 timep["kworker/u16:2+flush-8:128 0"] = 99 timep["kworker/u16:2+flush-8:96 0"] = 99 timep["kworker/u16:2-events_power_efficient 0"] = 99 timep["kworker/u16:3+flush-8:128 0"] = 99 timep["kworker/u16:3-events_power_efficient 0"] = 99 timep["kworker/u16:3-events_unbound 0"] = 99 timep["kworker/u16:3-ext4-rsv-conversion 0"] = 99 timep["kworker/u16:4+flush-8:128 0"] = 99 timep["kworker/u16:4-events_power_efficient 0"] = 99 timep["kworker/u16:5+flush-8:96 0"] = 99 timep["kworker/u16:5-events_power_efficient 0"] = 99 timep["kworker/u16:5-ext4-rsv-conversion 0"] = 99 timep["l2arc_feed 0"] = 99 timep["lightdm 0"] = 99 timep["listener 0"] = 9 timep["loadmonitor.sh 0"] = 19 timep["loop0 0"] = 9 timep["loop1 0"] = 9 timep["loop10 0"] = 9 timep["loop11 0"] = 9 timep["loop12 0"] = 9 timep["loop13 0"] = 9 timep["loop14 0"] = 9 timep["loop15 0"] = 9 timep["loop16 0"] = 9 timep["loop17 0"] = 9 timep["loop18 0"] = 9 timep["loop19 0"] = 9 timep["loop2 0"] = 9 timep["loop20 0"] = 9 timep["loop3 0"] = 9 timep["loop4 0"] = 9 timep["loop5 0"] = 9 timep["loop6 0"] = 9 timep["loop7 0"] = 9 timep["loop8 0"] = 9 timep["loop9 0"] = 9 timep["lxd"] = 29999 timep["MainThread"] = 1099 timep["master"] = 19 timep["md0_raid5 0"] = 599 timep["md0_resync 0"] = 99 timep["md5sum 0"] = 399 timep["md5sumian 0"] = 399 timep["metacity"] = 19 timep["migration/0"] = 29 timep["migration/1"] = 29 timep["migration/2"] = 29 timep["migration/3"] = 29 timep["mission-control"] = 99 timep["mount"] = 599 timep["mount.ntfs"] = 99 timep["mount.davfs"] = 99 timep["mozilla"] = 199 timep["mplayer"] = 99 timep["msec_find 0"] = 19 timep["mutt"] = 59 timep["multiload-apple"] = 59 timep["mysqld"] = 99 timep["named 76"] = 9 timep["nautilus"] = 99 timep["NetworkManager"] = 39 timep["nmbd 0"] = 99 timep["nm-applet"] = 199 timep["nscd 84"] = 9 timep["notification-ar"] = 69 timep["notify-osd"] = 99 timep["npviewer.bin"] = 99 timep["ntop"] = 99 timep["obs"] = 199 timep["palimpsest"] = 99 timep["pavucontrol-qt"] = 19 timep["pengalert_mailc"] = 19 timep["pengalert_sysmo"] = 19 timep["perl"] = 99 timep["Picasa2"] = 299 timep["pidgin"] = 59 timep["ping"] = 9 timep["plugin-containe"] = 999 timep["polkitd"] = 99 timep["Privileged"] = 99 timep["pppoe"] = 49 timep["pulseaudio"] = 399 timep["python"] = 199 timep["qemu"] = 99 timep["qmgr 35"] = 99 timep["rcuos/0"] = 49 timep["rcuos/1"] = 49 timep["rcuos/2"] = 49 timep["rcuos/3"] = 49 timep["rcu_sched"] = 199 timep["RDD"] = 199 timep["rdesktop"] = 99 timep["realplay"] = 99 timep["realplay_"] = 99 timep["rpmdrake 0"] = 9 timep["rpmv 0"] = 9 timep["rsyslogd"] = 99 timep["rsync"] = 99 timep["rxvt-unicode"] = 39 timep["scp-dbus-servic"] = 60 timep["screen"] = 99 timep["scsi_eh_0"] = 99 timep["scsi_eh_3"] = 99 timep["scsi_eh_4"] = 99 timep["scsi_eh_6"] = 99 timep["scsi_eh_7"] = 99 timep["scsi_eh_9"] = 99 timep["sensord 0"] = 99 timep["setiathome"] = 99999 timep["setiathome_3.08"] = 99999 timep["setiathome_4.02"] = 99999 timep["setiathome_6.03"] = 99999 timep["skype"] = 599 timep["sftp-server"] = 99 timep["snapd"] = 99 timep["snmpd"] = 99 timep["Socket"] = 99 timep["soffice.bin"] = 29 timep["spamd"] = 99 timep["spl_dynamic_tas"] = 99 timep["/usr/sbin/spamd"] = 99 timep["ssh"] = 99 timep["sshd"] = 99 timep["sulphur_um_4.23"] = 99999 timep["swapspace"] = 19 timep["syndaemon"] = 19 timep["syslogd"] = 99 timep["systemd"] = 29 timep["systemd-journal"] = 99 timep["thnuclnt"] = 19 timep["tknewsbiff"] = 99 timep["tmux"] = 399 timep["tmux:"] = 399 timep["txg_sync 0"] = 299 timep["top"] = 9 timep["totem"] = 299 timep["totem-plugin-vi"] = 29 timep["ubuntuone-syncd"] = 99 timep["ubuntu-sso-logi"] = 99 timep["udisks-daemon 0"] = 19 timep["udisksd 0"] = 99 timep["ultrabayd 0"] = 9 timep["unity-2d-panel"] = 39 timep["unity-2d-shell"] = 39 timep["unity-control-c"] = 39 timep["unity-greeter"] = 59 timep["unity-panel-ser"] = 99 timep["unity-settings-"] = 99 timep["updatedb 0"] = 19 timep["updatedb.mlocat"] = 19 timep["update-notifier"] = 299 timep["upowerd"] = 39 timep["upstart-dbus-br"] = 39 timep["urxvt"] = 39 timep["urxvtd"] = 39 timep["usb-storage 0"] = 599 timep["vi"] = 19 timep["vim"] = 19 timep["vino-server"] = 299 timep["VirtualBox"] = 199 timep["VBoxHeadless"] = 60000 timep["VirtualBoxVM"] = 60000 timep["VBoxService"] = 199 timep["VBoxSVC"] = 199 timep["VBoxXPCOMIPCD"] = 19 timep["vmnet-natd"] = 199 timep["vmnet-dhcpd"] = 19 timep["vmware"] = 99 timep["vmware-rtc"] = 199 timep["vmware-vmx"] = 9999 timep["vmware-tray"] = 299 timep["vokoscreenNG"] = 99 timep["vpnagentd"] = 59 timep["vpnui"] = 29 timep["vtwm"] = 29 timep["[w1_bus_master1] 0"] = 9 timep["w1_bus_master1"] = 99 timep["watch"] = 99 timep["Web"] = 799 timep["WebExtensions"] = 799 timep["whoopsie"] = 19 timep["wineserver"] = 99 timep["wireshark"] = 99 timep["wrtlistener"] = 19 timep["X 0"] = 2999 timep["xconsole"] = 155 timep["xdaliclock"] = 19 timep["xearth"] = 555 timep["xload"] = 9 timep["Xorg"] = 3999 timep["xosview"] = 99 timep["Xvnc"] = 999 timep["zcav"] = 99 timep["z_rd_int 0"] = 99 timep["zeitgeist-daemo"] = 29 timep["zeitgeist-fts"] = 29 timep["zoom"] = 199 timep["z_vdev_file 0"] = 99 timep["z_null_int 0"] = 99 timep["z_wr_iss 0"] = 99 } NR == 1 { title = $0 if ( $2 != "UID" || $3 != "PID" ) { print "Unknown parse for title:", $0 exit 1 } next } { # ignore defunct, stopped/suspended processes if ( $NF == "" ) next if ( $(NF-3) ~ /T/ ) next uid = $2 pid = $3 # some versions of ps are broken and have multi-word commands n = NF-1 time = $n while ( time !~ /^[0-9][0-9]*:/ ) { n = n - 1 time = $n } cmd = $(n+1) split(time,a,":") time = a[1] # only the minutes part p = "" # try specific uid time limit if ( p == "" ) p = timep[cmd " " uid] # try general time limit if ( p == "" ) p = timep[cmd] # try removing the . suffix (e.g. erpcd.9812 => erpcd) if ( p == "" && index(cmd,".") > 0 ) { split(cmd,a,".") # try specific uid time limit if ( p == "" ) p = timep[a[1] " " uid] # try general time limit if ( p == "" ) p = timep[a[1]] } # try removing the - suffix (e.g. gzip-1.2.4 => gzip) if ( p == "" && index(cmd,"-") > 0 ) { split(cmd,a,"-") # try specific uid time limit if ( p == "" ) p = timep[a[1] " " uid] # try general time limit if ( p == "" ) p = timep[a[1]] } # default to more than 5 minutes if ( p == "" ) p = 5 if ( time > p ) { print cmd " uid:" uid " pid:" pid " has time " time " minutes > limit " p # escape quotes back to shell cmd line system("'"$pscmd"'" pid) } } ' HOSTNAME=${HOSTNAME-`hostname`}