shell - 如何将 cron 转换为守护进程

标签 shell unix cron daemon ksh

我有一个 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/

相关文章:

c - c 中 chdir 的奇怪错误

amazon-ec2 - crontab 无法在 AWS EC2 实例中工作

mysql - 为什么我的 cron 作业会失败一半?

MongoDB:了解 createUser 和 db admin

ruby - 如何使用 PUBMEDid 从 pubmed 中获取摘要

macos - 在终端中生成随机文本文件

ubuntu - Ubuntu Hardy 上的 Cron 作业执行但未按预期删除文件

bash - 使用 sed 将文本附加到文件

linux - linux 排序命令的异常行为

bash - 是否有 ">/dev/null 2>&1"的命令行快捷方式