root 2439850 1 0 Oct16 ? 00:01:0...

Créé le : 17 octobre 2025

Répondu en utilisant GPT-5 par Chat01

Question

root 2439850 1 0 Oct16 ? 00:01:01 /export/jcloud-ufs/bin/audit-log-server -conf /export/jcloud-ufs/cfg/audit_log_server.cfg
如何停止 这个任务?

Réponse

你列出来的是一条 Linux 进程信息,像这样:

root     2439850       1  0 Oct16 ?        00:01:01 /export/jcloud-ufs/bin/audit-log-server -conf /export/jcloud-ufs/cfg/audit_log_server.cfg

要停止这个任务(也就是杀掉这个进程),可以按以下步骤来做👇


🧾 1. 确认进程 PID

在这行信息中,第 2 列就是进程号(PID):

2439850

🛑 2. 使用 kill 停止进程

  • 正常结束(优雅退出)

    bash
    sudo kill 2439850
  • 强制杀掉(如果上面命令无效)

    bash
    sudo kill -9 2439850

👉 -9 是发送 SIGKILL 信号,进程会被立刻终止,但不会执行清理工作。


🧹 3. 确认进程已停止

bash
ps -ef | grep audit-log-server

或:

bash
ps -p 2439850

如果没有输出,说明进程已经停止 ✅


⚠️ 4. 额外注意事项

  • 如果这个进程是由 系统服务(例如 systemd)或 守护进程 启动的,它可能会自动重启。
    👉 用 systemctl list-units | grep audit-log 检查是否是 systemd 管理的。
    👉 如果是,可以用:

    bash
    sudo systemctl stop audit-log-server.service sudo systemctl disable audit-log-server.service

    来停止并禁用。

  • 如果是通过 cron 或其他守护进程启动的,也需要一并关闭对应的启动项。


是否希望我一步步教你如何查看它是不是 systemd 管理的?(例如执行 systemctl list-units | grep audit

Question

select * from filesystem where fs_name=fs-ykh7smklie;
这个sql 对吗

Réponse

你的这条 SQL 语句:

sql
select * from filesystem where fs_name=fs-ykh7smklie;

语法上 不完全正确。问题出在 fs-ykh7smklie 这一部分。
在 SQL 中,字符串常量需要加引号。否则数据库会把它当作字段名或表达式解析。


✅ 正确写法应该是:

sql
SELECT * FROM filesystem WHERE fs_name = 'fs-ykh7smklie';

💡 补充说明

  • SELECT * 会返回表中所有字段;
  • filesystem 是表名;
  • fs_name 是字段名;
  • 'fs-ykh7smklie' 是字符串常量;
  • 分号 ; 可加可不加(多数 SQL 客户端在单条语句中可以省略)。

⚠️ 小提示

如果 fs_name 是区分大小写的(比如在某些 PostgreSQL 或 Hive 环境下),确保字段名大小写与表结构一致; 如果 fs_name 是数字字段,那就不要加引号。


是否方便告诉我你是在用哪种数据库?(比如 MySQL、PostgreSQL、Oracle、Hive 等),我可以给你写出对应的更规范版本。

Question

如何把 检索出来的 某个字段输出呢?

Réponse

非常好 👍 你想要从 SQL 查询结果中只输出(显示)某个字段,而不是所有字段,可以这样做:


✅ 基本语法

sql
SELECT 字段名 FROM 表名 WHERE 条件;

💡 举例

假设你刚才的表是 filesystem,并且你只想输出字段 fs_path,可以这样写:

sql
SELECT fs_path FROM filesystem WHERE fs_name = 'fs-ykh7smklie';

🧠 如果你要输出多个字段

用逗号分隔:

sql
SELECT fs_name, fs_path, fs_size FROM filesystem WHERE fs_type = 'ufs';

🧾 如果只是想快速看一行数据

加上 LIMIT 1

sql
SELECT fs_path FROM filesystem WHERE fs_name = 'fs-ykh7smklie' LIMIT 1;

⚙️ 扩展技巧

如果你只想打印结果到文件(例如在命令行中),可以:

  • MySQL

    bash
    mysql -e "SELECT fs_path FROM filesystem WHERE fs_name='fs-ykh7smklie';" > output.txt
  • PostgreSQL

    bash
    psql -c "SELECT fs_path FROM filesystem WHERE fs_name='fs-ykh7smklie';" > output.txt

你能告诉我你是在用哪种数据库(例如 MySQL、PostgreSQL、Oracle、SQLite、Hive)吗?我可以给你最合适的“输出字段到文件”命令。

Question

sh /export/yhdfs/daily_check/yhdfs/script/audit_log_test.sh stat -audit_log_test_hadoop_home /export/jcloud-hadoop/hadoop-2.6.1-audit-log >> /export/yhdfs/daily_check/yhdfs/script/yhdfs_audit_log_stat.out

能否先sh到 10.0.0.12 再ssh 到 10.0.0.13 再执行sh脚本,最后 再把输出 打到out文件里面

Réponse

可以做到 ✅,只需要用 多层 SSH 调用 把命令“转发”执行,并把输出重定向回本地(或者某个节点)。下面给你几种实现方式:


🧩 1. 一条命令完成(推荐)

你可以在 10.0.0.12 上运行下面命令:

bash
ssh 10.0.0.12 "ssh 10.0.0.13 'sh /export/yhdfs/daily_check/yhdfs/script/audit_log_test.sh stat -audit_log_test_hadoop_home /export/jcloud-hadoop/hadoop-2.6.1-audit-log' " >> /export/yhdfs/daily_check/yhdfs/script/yhdfs_audit_log_stat.out

解释:

  • 第一个 ssh 10.0.0.12:登录到 10.0.0.12。
  • 第二个 ssh 10.0.0.13 '...':从 10.0.0.12 再登录 10.0.0.13。
  • 单引号 '...' 内执行你的脚本。
  • >> ...out:最终把输出重定向(追加)到本地的 out 文件。

⚠️ 注意:这样写时,最终 out 文件会保存在 执行命令的机器上(比如你当前主机),而不是远程节点。


🪜 2. 如果希望输出文件保存在 10.0.0.12

可以这样写:

bash
ssh 10.0.0.12 "ssh 10.0.0.13 'sh /export/yhdfs/daily_check/yhdfs/script/audit_log_test.sh stat -audit_log_test_hadoop_home /export/jcloud-hadoop/hadoop-2.6.1-audit-log' >> /export/yhdfs/daily_check/yhdfs/script/yhdfs_audit_log_stat.out"

📍区别:
>> 放在内层 '...' 外面,就会在 10.0.0.12 上生成输出文件。


🔐 3. 确保 SSH 链路正常

  • 10.0.0.12 能免密登录到 10.0.0.13;
  • 你本机能免密登录到 10.0.0.12; 否则执行时会卡在输入密码。

可测试:

bash
ssh 10.0.0.12 ssh 10.0.0.13

🧠 4. 另一种更稳健的写法(用 heredoc)

bash
ssh 10.0.0.12 << 'EOF' ssh 10.0.0.13 'sh /export/yhdfs/daily_check/yhdfs/script/audit_log_test.sh stat -audit_log_test_hadoop_home /export/jcloud-hadoop/hadoop-2.6.1-audit-log' >> /export/yhdfs/daily_check/yhdfs/script/yhdfs_audit_log_stat.out EOF

这方式更可读,也方便扩展多条命令。


是否希望我帮你改成一个可以直接放进 crontab(定时执行)的版本?

Question

root 3321945 3305304 0 17:01 pts/1 00:00:00 sh ./audit_log_test.sh test -global_api_service 10.0.0.17:6600 -audit_log_http_urls 10.0.0.13:20002 -audit_log_tcp_urls 10.0.0.13:20001 -audit_log_server_ips 10.0.0.13 -audit_log_server_log_path /export/jcloud-ufs/log/audit_log_server/audit.log /export/jcloud-ufs/log/audit_log_server/audit.1.log -test_fs_name fs-ykh7smklie -test_fs_id 2 -audit_log_test_hadoop_home /export/jcloud-hadoop/hadoop-2.7.3-hch

怎么把这个进程删了

Réponse

你要“删掉”这个进程,也就是停止 / 杀掉它
看你给出的这一行:

root     3321945 3305304  0 17:01 pts/1    00:00:00 sh ./audit_log_test.sh ...

第二列 3321945PID(进程号)


🧾 1. 查看进程详情(可选)

bash
ps -fp 3321945

确认它确实是你要结束的脚本。


🛑 2. 杀掉进程

优雅停止(推荐先试)

bash
sudo kill 3321945

如果不响应(强制杀掉)

bash
sudo kill -9 3321945

✅ 3. 确认进程已结束

bash
ps -ef | grep audit_log_test.sh

如果没输出,说明已经被杀掉。


⚠️ 注意事项

  • 如果这个脚本由其他守护进程或定时任务(如 cron)自动启动,它可能会被重新拉起。
    → 可用以下命令查看:

    bash
    crontab -l | grep audit_log_test

    或:

    bash
    systemctl list-units | grep audit_log
  • 如果需要彻底阻止它重启,找到启动它的来源(比如 crontab、systemd、supervisord)并移除或禁用对应配置。


要不要我帮你写一条命令,一次性“查找并杀掉所有 audit_log_test.sh 相关进程”?

Question

drwxr-x--- 15 root root 4096 Oct 17 16:22 hadoop-2.7.3-hch
drwxr-x--- 15 root root 4096 Apr 9 2025 hadoop-2.7.3-ljd
drwxr-xr-x 8 root root 4096 Nov 12 2024 jdk1.8.0_381

13节点上 把 jdk 和 hadoop 打包一些,然后 传到 12节点上去。 应该 12 能免密 13 13应该去不了12

Réflexion

Thought for 16s

Réponse

可以的。因为 12 能免密到 13(但 13 不能到 12),最稳妥的做法是:在 12 发起远程打包,把包生成在 13 的 /tmp,然后再从 12 侧拉取。下面给你一套可直接粘贴的命令。

假设这些目录都在 13 的 /export/jcloud-hadoop/ 下(从你给的 ls 看是这样):
hadoop-2.7.3-hchhadoop-2.7.3-ljdjdk1.8.0_381


第一步:从 12 上远程登录 13 打包(在 13 的 /tmp 生成压缩包)

10.0.0.12 上执行

bash
ssh 10.0.0.13 'cd /export/jcloud-hadoop && \ tar -czf /tmp/jdk_hadoop_$(date +%F).tgz hadoop-2.7.3-hch hadoop-2.7.3-ljd jdk1.8.0_381 && \ sha256sum /tmp/jdk_hadoop_$(date +%F).tgz'
  • 会在 13 的 /tmp 下生成:/tmp/jdk_hadoop_YYYY-MM-DD.tgz
  • 同时打印校验和,方便等会儿校验传输完整性

如果你只想分别打包:

bash
ssh 10.0.0.13 'cd /export/jcloud-hadoop && \ tar -czf /tmp/hadoop-2.7.3-hch_$(date +%F).tgz hadoop-2.7.3-hch && \ tar -czf /tmp/hadoop-2.7.3-ljd_$(date +%F).tgz hadoop-2.7.3-ljd && \ tar -czf /tmp/jdk1.8.0_381_$(date +%F).tgz jdk1.8.0_381 && \ sha256sum /tmp/*_$(date +%F).tgz'

第二步:从 12 拉取 13 上的压缩包到 12 本地

仍然在 10.0.0.12 上执行(把 /data/pkg 换成你的目标目录):

bash
mkdir -p /data/pkg scp [email protected]:/tmp/jdk_hadoop_$(date +%F).tgz /data/pkg/

或如果分包:

bash
scp [email protected]:/tmp/{hadoop-2.7.3-hch_$(date +%F).tgz,hadoop-2.7.3-ljd_$(date +%F).tgz,jdk1.8.0_381_$(date +%F).tgz} /data/pkg/

第三步:校验并解压(在 12 上)

bash
cd /data/pkg sha256sum jdk_hadoop_$(date +%F).tgz # 对照第一步打印的校验值 tar -xzf jdk_hadoop_$(date +%F).tgz -C /export/jcloud-hadoop

分包则分别解压:

bash
tar -xzf hadoop-2.7.3-hch_$(date +%F).tgz -C /export/jcloud-hadoop tar -xzf hadoop-2.7.3-ljd_$(date +%F).tgz -C /export/jcloud-hadoop tar -xzf jdk1.8.0_381_$(date +%F).tgz -C /export/jcloud-hadoop

常见注意点

  • 空间:先确认 13 的 /tmp 有足够磁盘空间存放压缩包,或把输出路径换到有空间的目录(比如 /export/tmp)。
  • 权限/属主:解压时在 12 用 root 执行,默认会保留文件权限。若需要严格保留属主,可在解压时加 --same-owner(root 执行才有效)。
  • 排除日志/大文件:如果这些目录内有不需要的巨大日志,打包时可以排除,例如:
    bash
    tar --exclude='*/logs/*' -czf /tmp/jdk_hadoop_$(date +%F).tgz ...
  • 稳定传输:大文件建议用 rsync(同样由 12 发起拉取):
    bash
    rsync -avz --progress [email protected]:/export/jcloud-hadoop/{hadoop-2.7.3-hch,hadoop-2.7.3-ljd,jdk1.8.0_381} /export/jcloud-hadoop/
    (这种是“直接目录同步”,不打包;适合网络不太稳时断点续传)

需要我把上面的命令封装成一个可复用的脚本,或者替你加上排除规则吗?

Question

main_routine_test.sh cron每天 9.15分执行,然后 把日志输出到当前log 里面/export/yhdfs/daily_check/routine_test/log 里面的一个日志文件里面

Réflexion

Setting up the cron job

To run a script daily at 09:15, I'll suggest the following crontab line:

15 09 * * * /bin/bash -lc '/export/yhdfs/daily_check/routine_test/main_routine_test.sh >> /export/yhdfs/daily_check/logs/$(date +\%F).log 2>&1'

This will also handle path specification, environment settings, log rotation, and the timestamped log. I'll make sure the log directory exists and use flock for preventing overlap.

Thought for 12s

Réponse

可以,给你一条可直接放进 crontab 的配置:每天 09:15 执行 main_routine_test.sh,并把日志追加
/export/yhdfs/daily_check/routine_test/log/ 目录下按日期归档的日志文件里。

先假设脚本在:/export/yhdfs/daily_check/routine_test/main_routine_test.sh

1) 确保脚本可执行

bash
chmod +x /export/yhdfs/daily_check/routine_test/main_routine_test.sh

2) 编辑当前用户的 crontab

bash
crontab -e

3) 填入下面三行(建议一起放)

cron
MAILTO="" SHELL=/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 15 9 * * * /usr/bin/flock -n /tmp/main_routine_test.lock /bin/bash -lc 'mkdir -p /export/yhdfs/daily_check/routine_test/log && /export/yhdfs/daily_check/routine_test/main_routine_test.sh >> /export/yhdfs/daily_check/routine_test/log/$(date +\%F).log 2>&1'

说明:

  • 15 9 * * *:每天 09:15 触发。
  • flock -n:防止上一次还没跑完就“重叠运行”。
  • mkdir -p .../log:确保日志目录存在。
  • >> .../$(date +\%F).log:按日期写入日志(如 2025-10-17.log)。在 crontab 里 % 需要转义,所以写成 \%F
  • 2>&1:把错误也一起写入日志。
  • PATH:给 cron 一个常用 PATH,避免找不到命令。
  • 如果你是改 系统级 crontab/etc/crontab),那一行需要加上用户,比如:
    cron
    15 9 * * * root /usr/bin/flock -n /tmp/main_routine_test.lock /bin/bash -lc 'mkdir -p /export/yhdfs/daily_check/routine_test/log && /export/yhdfs/daily_check/routine_test/main_routine_test.sh >> /export/yhdfs/daily_check/routine_test/log/$(date +\%F).log 2>&1'

可选增强

  • 限制日志大小/保留天数:配合 logrotate,每天轮转并保留 7 天:
    text
    /export/yhdfs/daily_check/routine_test/log/*.log { daily rotate 7 compress missingok notifempty dateext }
  • 自检输出:脚本开头打印时间与主机:
    bash
    echo "==== $(date '+%F %T') on $(hostname) ===="

要不要我把这几步封装成一个一键安装的小脚本?

Partager cette Q&R