Karp 的技术博客
操作系统
Awk 字符串截取实例

Awk 是一个强大的文本处理工具,广泛用于数据提取和报告生成。在处理文本数据时,字符串截取是一个常见需求。本文将介绍如何使用 Awk 进行字符串截取,并提供一些实际示例。

编程语言
Swoole 日志 部分代码
/**
 * @desc work进程内日志 仅限work 进程内使用
 * @author lbf
 * @param $msg
 * @param string $name
 *------------------------------------------------------
 */
public static function Wlog($msg, $name = Log::MATCH)
{
    if (!Main::WRITE_DEBUG_LOG && $name == Log::DEBUG) return;

    $name = $name == Log::DEBUG ? Log::MATCH : $name;
    $name = $name == Log::SQL ? Log::MATCH : $name;

    $str = '';
    if (is_array($msg)) {
        foreach ($msg as $key => $val) {
            if (is_array($val))
                $val = json_encode($val);
            $str .= " {$key} {$val}";
        }
    } else {
        $str = $msg;
    }

    $worker_id = APP::getWorkerId();
    if ($worker_id < 0) {
        $worker_id = 'task';
    }
    $date = date('Y/m/d H:i:s');
    $no = date('Ymd');
    $log_dir = LOG_PATH . DS . self::getLogName();
    if (!is_dir($log_dir)) {
        @mkdir($log_dir, 0755, true);
    }
    $file_name = LOG_PATH . DS . self::getLogName() . DS . $name . '-' . $worker_id . '-' . $no . '.log';
    $data = "[" . $date . "]";
    $data .= " _" . APP::getUniqueLogId() . "_";
    $data .= " @ " . $str . "\n";

    file_put_contents($file_name, $data, FILE_APPEND);
}
Nginx
PHP 和 Nginx 实现实时输出的方法

在 Web 开发中,实时输出(或称为流式输出)允许服务器逐步发送数据到客户端,而不是一次性发送所有内容。这对于长时间运行的 PHP 脚本(例如处理文件上传、实时数据生成等)非常有用。本文将介绍如何使用 PHP 和 Nginx 实现实时输出。

编程语言
另类的遍历 PHP 数组方法

在 PHP 中,遍历数组通常使用 foreachforwhile 等基本方法。然而,PHP 提供了许多其他有趣和高效的方式来遍历数组。本文将介绍一些另类的遍历数组的方法,帮助你更灵活地处理数组数据。

编程语言
Shell 监控文件新增数据并将数据发送钉钉机器人
#!/bin/sh

# 监控日志新增内容数据

# 告警通用API
NOTICE_URL='https://oapi.dingtalk.com/robot/send?access_token=670316378281374a7150b6303cbc722f5cb9438ede6c251624c4d6057eaeafa68'

# 获取当前所在机器IP
LOCAL_IP=`/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"`

# 日志文件
LOG_FILE=$1

# 判断文件是否存在
if [ ! -f $LOG_FILE ]; then
        echo '文件未找到'
        exit 1
fi

# 最后行数临时存储 
LAST_LINE_TMP=${LOG_FILE}".line_tmp"

# 判断临时文件是否存在 不存在则初始化文件数据
if [ ! -f $LAST_LINE_TMP ]; then
        echo 0 > $LAST_LINE_TMP 
fi

# 获取临时行数
LAST_LINE=`cat $LAST_LINE_TMP`

# 获取当前文件行数
CUR_LINE=`cat $LOG_FILE |wc -l`

echo "Last行数 : $LAST_LINE"

echo "Current行数 : $CUR_LINE"

# MarkDown 标记
HEAD_TAG='###'
CONTENT_TAG='#####'

if [ $CUR_LINE == $LAST_LINE ]; then
        echo '无异常'
else
        // 计算提取行数
        tail_line=$[CUR_LINE-LAST_LINE]
        
        # 日志数据处理
        content=`tail -n $tail_line $LOG_FILE |head -n 100 |xargs echo `
        CONTENT_STRING=`echo $content`
        
        # 机器报警标题描述
        TITLE="机器IP : "$LOCAL_IP" ; 监控文件:"$LOG_FILE

        # 测试输出
        echo "------------ REQUERT START  -----------------------------------------------------------------------------"
        echo "curl "${NOTICE_URL}" -H 'Content-Type: application/json' -d '{\"msgtype\": \"markdown\",\"markdown\":{\"title\":\""$TITLE"\",\"text\":\""$CONTENT_STRING"\"},\"at\":{\"isAtAll\":true}}"
        echo "------------ REQUERT END    -----------------------------------------------------------------------------"


        RESULT=`curl $NOTICE_URL -H 'Content-Type: application/json' -d "{\"msgtype\":\"markdown\",\"markdown\":{\"title\":\"$TITLE\",\"text\":\"$HEAD_TAG $TITLE \r\n$CONTENT_TAG $CONTENT_STRING\"},\"at\":{\"isAtAll\":true}}"`
        
        # 输出响应效果
        echo "Result: $RESULT"

        # 更新临时行数存储
        echo $CUR_LINE > $LAST_LINE_TMP 
fi