Files
manjapro_v6/load/check_voucher_all/load_multi_cek.php
T
2026-08-20 18:39:37 +07:00

89 lines
2.6 KiB
PHP

<?php
// filename: /www/wwwroot/bilspro/load/check_voucher_all/load_multi_cek.php
ini_set('display_errors', 1);
error_reporting(E_ALL);
if (php_sapi_name() !== 'cli') {
exit("CLI only\n");
}
// ============================
// LOCK BIAR GAK DOUBLE CRON
// ============================
$lockFile = '/tmp/load_multi_cek.lock';
if (file_exists($lockFile)) {
$pid = (int)file_get_contents($lockFile);
if ($pid && posix_kill($pid, 0)) {
exit("Masih running PID $pid\n");
}
}
file_put_contents($lockFile, getmypid());
register_shutdown_function(function () use ($lockFile) {
@unlink($lockFile);
});
include "/www/wwwroot/bilspro/config/connect.php";
$max_process = 5;
try {
$query = "SELECT nama, ip_address, username, password, port_api, id_setting_mikrotik
FROM v_load_api_cek_voucher";
$set1 = $pdo->query($query);
if ($set1 && $set1->rowCount() > 0) {
while ($pset = $set1->fetch(PDO::FETCH_ASSOC)) {
// ============================
// LIMIT PROCESS REAL
// ============================
while (true) {
$running = (int)shell_exec("/usr/bin/pgrep -fc check_voucher.php");
if ($running < $max_process) break;
sleep(1);
}
// ============================
// PARAMETER AMAN
// ============================
$m_ip = escapeshellarg($pset['ip_address']);
$m_user = escapeshellarg($pset['username']);
$m_pass = escapeshellarg($pset['password']);
$m_port = escapeshellarg($pset['port_api']);
$idsm = escapeshellarg($pset['id_setting_mikrotik']);
$nama = escapeshellarg($pset['nama']);
// ============================
// COMMAND FIX (NO MULTILINE)
// ============================
$command = "/usr/bin/php /www/wwwroot/bilspro/load/check_voucher_all/check_voucher.php "
. "{$m_ip} {$m_user} {$m_pass} {$m_port} {$idsm} {$nama} "
. ">> /www/wwwroot/bilspro/load/check_voucher_all/log_worker.log 2>&1 &";
exec($command);
echo "[" . date('Y-m-d H:i:s') . "] Start: {$pset['ip_address']} - {$pset['nama']}\n";
usleep(200000);
}
echo "[" . date('Y-m-d H:i:s') . "] Semua process dimulai\n";
} else {
$stmt = $pdo->prepare("UPDATE ganerate_voucher SET status_cek = NULL WHERE status_cek = '1'");
$stmt->execute();
echo "Reset status_cek selesai\n";
}
} catch (PDOException $e) {
echo "Database Error: " . $e->getMessage() . "\n";
}