Files
clawd/bin/clawd.js
stswangzhiping 46153b5a5e read sms loop
2026-05-01 09:29:04 +08:00

60 lines
1.5 KiB
JavaScript
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env node
'use strict';
// 先于其它模块:摘掉 NOTIFY_SOCKET避免任意子进程误发 systemd notify
require('../lib/systemd-env');
const path = require('path');
const { exec } = require('child_process');
const { ClawClient } = require('../lib/client');
const log = require('../lib/logger');
const { pollSms } = require('../drivers/sim/sms-reader');
// 每次启动绑定 Quectel 串口驱动(失败不影响主流程)
const bindScript = path.join(__dirname, '..', 'tools', 'bind-quectel-serial.sh');
exec(`bash "${bindScript}"`, (err, stdout, stderr) => {
if (err) log.warn('clawd', `bind-quectel-serial: ${stderr || err.message}`);
else log.info('clawd', `bind-quectel-serial: ok`);
});
let smsTimer = null;
let smsPolling = false;
async function pollSmsSafe() {
if (smsPolling) return;
smsPolling = true;
try {
const text = await pollSms();
process.stdout.write(text);
} catch (err) {
log.warn('clawd', `sms-reader poll failed: ${err.message}`);
} finally {
smsPolling = false;
}
}
const client = new ClawClient();
client.start();
pollSmsSafe();
smsTimer = setInterval(pollSmsSafe, 15_000);
let stopping = false;
function shutdown(signal) {
if (stopping) return;
stopping = true;
log.info('clawd', `收到 ${signal},正在停止...`);
if (smsTimer) {
clearInterval(smsTimer);
smsTimer = null;
}
client.stop();
setTimeout(() => process.exit(0), 500);
}
process.on('SIGINT', () => shutdown('SIGINT'));
process.on('SIGTERM', () => shutdown('SIGTERM'));