我使用crontask来定期运行Rscript.不幸的是,我需要在一小部分aws中执行此操作,并且进程可能会挂起,从而建立越来越多的进程,直到整个系统滞后.
我想写一个crontask来杀死持续时间超过一分钟的所有R进程.我想出了
if [[ "$(uname)" = "Linux" ]];then killall --older-than 1m "/usr/lib/R/bin/exec/R --slave --no-restore --file=/home/ubuntu/script.R";fi
我直接从htop复制了任务,但是没有像我所期望的那样工作.我得到没有这样的文件或目录错误,但我已经检查了几次.
我需要杀死持续时间超过一分钟的所有R进程.我该怎么做?
您可能希望避免从其他用户杀死进程,并在SIGTERM(kill -15)之后尝试SIGKILL(kill -9).这是一个脚本,您可以使用CRON工作每分钟执行一次:
#!/bin/bash PROCESS="R" MAXTIME=`date -d '00:01:00' +'%s'` function killpids() { PIDS=`pgrep -u "${USER}" -x "${PROCESS}"` # Loop over all matching PIDs for pid in ${PIDS}; do # Retrieve duration of the process TIME=`ps -o time:1= -p "${pid}" | egrep -o "[0-9]{0,2}:?[0-9]{0,2}:[0-9]{2}$"` # Convert TIME to timestamp TTIME=`date -d "${TIME}" +'%s'` # Check if the process should be killed if [ "${TTIME}" -gt "${MAXTIME}" ]; then kill ${1} "${pid}" fi done } # Leave a chance to kill processes properly (SIGTERM) killpids "-15" sleep 5 # Now kill remaining processes (SIGKILL) killpids "-9"