我有一个 cron shell 脚本,它调用一个存储过程来执行一些操作。我想知道如何将该 cron 更改为守护进程。
这就是我所拥有的。
#!/bin/ksh
# @(#)abc.sh
. /somedir/env/some_profile
JOBNAME=`basename $0`
LOG_DIR=$PROJHOME/log
LOG_FILE=$LOG_DIR/process_abc.log
function usage
{
echo "${JOBNAME}: Usage: ${JOBNAME}"
echo "Exiting..."
echo "process_abc ended ***UNSUCCESSFULLY*** at `date`" | tee -a $LOG_FILE
echo "" | tee -a $LOG_FILE
exit 1
}
你能帮忙吗。您的帮助将不胜感激。
谢谢
最佳答案
你可以从 bash 运行它
SLEEP_INTERVAL=3600
(echo $$ > /var/run/script-runner.sh.pid && while :; do script.sh ; sleep $SLEEP_INTERVAL ; done) &
或者您可以在脚本中执行相同的循环
trap "function_that_runs_everything" HUP
echo $$ > /var/run/script.sh.pid
while :; do
function_that_runs_everything
sleep $SLEEP_INTERVAL #or sleep forever just waiting for SIGHUP
done
这样你也可以从外部强制执行内部函数
kill -1 `cat /var/run/script.sh.pid`
我也建议重写:
if [ `/usr/ucb/ps -auxww | grep $JOBNAME | grep "sh -c" | grep -v grep | wc -l` -gt 1 ]
使用 $$(当前 shell 的 pid)并创建 pid 文件
pseudocode:
PIDFILE=/var/run/`basename $0`.pid
if $PIDFILE exists
log and exit
else
echo $$ > $PIDFILE
...
run
...
rm -f $PIDFILE
(不要忘记删除pid文件@失败退出)
关于shell - 如何将 cron 转换为守护进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8295874/