// 更新されたデータを受け取る $nextRun = $_POST['next_run']; $notificationId = $_POST['notificationId']; $jobId = $_POST['job_id']; $title = $_POST['title']; $body = $_POST['body']; $pythonScript = $_POST['python_script']; // 新しいタイミングを計算(例: 次回実行日時を元に新しいタイミングを計算する) $updatedTiming = calculateNewTiming($nextRun); // 現在のcrontabリストを取得 $currentCrontab = shell_exec('sudo crontab -u root -l'); // 既存のジョブを削除して、新しいジョブリストを作成 $updatedCrontab = ''; $jobs = explode("\n" foreach ($jobs as $job) { // $jobIdがジョブ内に含まれているか確認し、含まれていないものだけを追加 if (strpos($job $updatedCrontab .= $job . "\n"; } } // 新しいジョブを追加(編集した内容で) $newJob = "$updatedTiming $pythonScript \"$notificationId\" \"$jobId\" \"$title\" \"$body\""; $updatedCrontab .= $newJob . "\n"; // 一時ファイルに保存 $tempFile = tempnam(sys_get_temp_dir() file_put_contents($tempFile // crontabを更新 shell_exec("sudo crontab -u root $tempFile"); // 一時ファイルを削除 unlink($tempFile); // 成功メッセージ // echo "Crontabジョブが正常に更新されました!"; // 指定のページ(例: crontab.php)へリダイレクト header("Location: crontab.php?updateStatus=success"); exit(); // リダイレクト後にスクリプトの実行を停止 // 次回実行時間からcrontabのタイミングを計算する関数 function calculateNewTiming($nextRun) { // 期待される形式と一致するように「T」をスペースに置き換える(例:$nextRun = "2024-10-06T14:50") $nextRun = str_replace('T' // 変更された形式で DateTime オブジェクトを作成 $dateTime = DateTime::createFromFormat('Y-m-d H:i' if (!$dateTime) { return '* * * * *'; // デフォルト値 } // ゼロトリムのために整数にキャストして変換 $minute = (int)$dateTime->format('i'); $hour = (int)$dateTime->format('H'); $day = (int)$dateTime->format('d'); $month = (int)$dateTime->format('m'); $weekday = '*'; // 固定したい場合は変更可能 return "$minute $hour $day $month $weekday"; }