Shell 以进程名称和时间作为输入在特定时间终止进程的脚本
Shell script to kill a process in specific time with process name and time as input
我需要一个 shell 脚本来在特定时间后通过获取进程名称和时间作为输入来终止特定 运行 进程。
我正在使用 centos 机器我已经尝试了脚本但是无法完成在特定时间终止进程。
#!/bin/bash
read -p 'Process: ' name
read -p 'Timecontrol: ' time
ps -ef | grep $name | awk '{print }'
pkill -9 "$name"
在特定时间内终止进程的预期输出将作为输入给出。
您可以使用 cron 作业在特定日期和时间终止进程。
如果必须使用脚本:
#!/bin/bash
read -p 'Process: ' name
read -p 'Timecontrol: ' timecontrol
while :
do
now="$(date --date="$(date +%H:%M)" +%s)"
x="$(date --date="$timecontrol" +%s)"
if [ $now == $x ]
then
ps -ef | grep $name | awk '{print }'
fi
done
注:
- 如果您打算永远 运行 此脚本,请删除
#
。
脚本不会在您想要将其作为输入的特定时间终止进程,因为脚本会 运行 并且不会等待特定时间。
你可以用两种方式逗它。
- 循环,但它将再次 运行 在前台
- 定时任务
#!/bin/bash
EXIT_ON_KILL=true
read -p 'Process: ' name
read -p 'Timecontrol: ' timecontrol
while :
do
current_time=$(date +"%T")
echo $current_time "control "
current_time=$(echo $current_time | cut -d':' -f1-2)
if [ "${timecontrol}" == "${current_time}" ]
then
echo "killing process"
kill -9 $(ps -ef | grep $name | awk '{print }')
if [ $? -eq 0 ]; then
echo "Process killed having name $name and having $pid"
if [ $EXIT_ON_KILL == true ];then
exit 0
fi
else
echo "Failed to Kill process having name $name"
exit 1
fi
fi
sleep 2
done
awk '{print }'
这个returnPID
在ubuntu,如果没有就必须签入Centos returns PID
然后将其更改为 awk '{print }'
所以你可以 运行 和
./kill_process.sh
Process: node
Timecontrol: 00:21
使用 Cron 作业,您不需要传递时间,只需传递进程的名称,脚本将 运行 在指定的时间终止进程。
#!/bin/bash
EXIT_ON_KILL=true
p_name=
kill -9 $(ps -ef | grep $p_name | awk '{print }')
if [ $? -eq 0 ]; then
echo "Process killed having name $p_name and having $pid"
if [ $EXIT_ON_KILL == true ];then
exit 0
fi
else
echo "Failed to Kill process having name $p_name"
exit 1
fi
0 0 * * * /path_to_script/kill_process.sh node
这将在每天午夜终止进程
- 使用此脚本,您可以通过提供进程名称和时间在特定时间终止 运行 进程。
[注意:时间的输入必须以秒为单位,即 120 表示 2 分钟]
#!/bin/bash
LOG=/tmp/kill.log
EXIT_ON_KILL=true
read -p 'Process: ' name
read -p 'killat: ' time
PID=$(ps -ef | grep $name | awk '{print }')
ps -ef | grep $name | awk '{print }' &>>$LOG
if [ $? -eq 0 ]; then
echo -e "\n The process details "
ps -p $PID
else
echo -e "\nInvalid Process Name"
fi
current=$(date +"%T")
killat=$(date -d "+"$time" seconds" "+%T")
echo -e "\nCurrent time $current \nThe time target is $killat"
while :
do
current=$(date +"%T")
echo $current
if [ "${killat}" == "${current}" ]
then
kill -9 $PID &>>$LOG
if [ $? -eq 0 ]; then
echo "Process $name have been successfully killed"
if [ $EXIT_ON_KILL == true ];then
exit 0
fi
else
echo -e "\nFailed to Kill process $name"
echo -e "\nMay be Invalid Process Name"
exit 1
fi
fi
sleep 2
done
示例输入:
Process: xxxx
Killat: 120
我需要一个 shell 脚本来在特定时间后通过获取进程名称和时间作为输入来终止特定 运行 进程。
我正在使用 centos 机器我已经尝试了脚本但是无法完成在特定时间终止进程。
#!/bin/bash
read -p 'Process: ' name
read -p 'Timecontrol: ' time
ps -ef | grep $name | awk '{print }'
pkill -9 "$name"
在特定时间内终止进程的预期输出将作为输入给出。
您可以使用 cron 作业在特定日期和时间终止进程。
如果必须使用脚本:
#!/bin/bash
read -p 'Process: ' name
read -p 'Timecontrol: ' timecontrol
while :
do
now="$(date --date="$(date +%H:%M)" +%s)"
x="$(date --date="$timecontrol" +%s)"
if [ $now == $x ]
then
ps -ef | grep $name | awk '{print }'
fi
done
注:
- 如果您打算永远 运行 此脚本,请删除
#
。
脚本不会在您想要将其作为输入的特定时间终止进程,因为脚本会 运行 并且不会等待特定时间。
你可以用两种方式逗它。
- 循环,但它将再次 运行 在前台
- 定时任务
#!/bin/bash
EXIT_ON_KILL=true
read -p 'Process: ' name
read -p 'Timecontrol: ' timecontrol
while :
do
current_time=$(date +"%T")
echo $current_time "control "
current_time=$(echo $current_time | cut -d':' -f1-2)
if [ "${timecontrol}" == "${current_time}" ]
then
echo "killing process"
kill -9 $(ps -ef | grep $name | awk '{print }')
if [ $? -eq 0 ]; then
echo "Process killed having name $name and having $pid"
if [ $EXIT_ON_KILL == true ];then
exit 0
fi
else
echo "Failed to Kill process having name $name"
exit 1
fi
fi
sleep 2
done
awk '{print }'
这个returnPID
在ubuntu,如果没有就必须签入Centos returns PID
然后将其更改为 awk '{print }'
所以你可以 运行 和
./kill_process.sh
Process: node
Timecontrol: 00:21
使用 Cron 作业,您不需要传递时间,只需传递进程的名称,脚本将 运行 在指定的时间终止进程。
#!/bin/bash
EXIT_ON_KILL=true
p_name=
kill -9 $(ps -ef | grep $p_name | awk '{print }')
if [ $? -eq 0 ]; then
echo "Process killed having name $p_name and having $pid"
if [ $EXIT_ON_KILL == true ];then
exit 0
fi
else
echo "Failed to Kill process having name $p_name"
exit 1
fi
0 0 * * * /path_to_script/kill_process.sh node
这将在每天午夜终止进程
- 使用此脚本,您可以通过提供进程名称和时间在特定时间终止 运行 进程。
[注意:时间的输入必须以秒为单位,即 120 表示 2 分钟]
#!/bin/bash
LOG=/tmp/kill.log
EXIT_ON_KILL=true
read -p 'Process: ' name
read -p 'killat: ' time
PID=$(ps -ef | grep $name | awk '{print }')
ps -ef | grep $name | awk '{print }' &>>$LOG
if [ $? -eq 0 ]; then
echo -e "\n The process details "
ps -p $PID
else
echo -e "\nInvalid Process Name"
fi
current=$(date +"%T")
killat=$(date -d "+"$time" seconds" "+%T")
echo -e "\nCurrent time $current \nThe time target is $killat"
while :
do
current=$(date +"%T")
echo $current
if [ "${killat}" == "${current}" ]
then
kill -9 $PID &>>$LOG
if [ $? -eq 0 ]; then
echo "Process $name have been successfully killed"
if [ $EXIT_ON_KILL == true ];then
exit 0
fi
else
echo -e "\nFailed to Kill process $name"
echo -e "\nMay be Invalid Process Name"
exit 1
fi
fi
sleep 2
done
示例输入:
Process: xxxx
Killat: 120