1.スクリプトの実行開始からの経過時間の計測・およびその時点でトリガーを設定する方法
2.どこまでファイルのコピーが完了したかを保持し、トリガーで再度スクリプトを実行した時に途中からコピーを始める方法
がわかりません。コード提案などよろしくお願いします。
(関係ないと思いますが、一応念のため。Google Apps for Educationを利用しています)
function startTrigger() { //この関数を1日一回のクーロンなどで登録しておく //初期化とバックアップトリガーを設定 PropertiesService.getScriptProperties().deleteProperty("fileContinuationToken"); ScriptApp.newTrigger("backup").timeBased().everyMinutes(1).create();}
function backup(){ //バックアップ処理 var lock = LockService.getScriptLock(); //ロックを実施 = 処理中 if(lock.tryLock(1000)) { // skip; return; } var prop = PropertiesService.getScriptProperties(); //どこまで処理したかのToken var fileContinuationToken = prop.getProperty("fileContinuationToken"); if(fileContinuationToken) { var files = DriveApp.continueFileIterator(fileContinuationToken); } else { var folder = DriveApp.getRootFolder(); var files = folder.getFiles() } while(files.hasNext()) { //一つ処理する毎にトークンを保存しておく prop.setProperty("fileContinuationToken", files.getContinuationToken()); var file = files.next();
// doBackup // 実際のバックアップ処理 // 一応スリープ Utilities.sleep(1000); } // トークンを削除 PropertiesService.getScriptProperties().deleteProperty("fileContinuationToken"); // backupのトリガーを削除 endTrigger(); // ロックを開放 lock.releaseLock(); }
function endTrigger() { //バックアップトリガーを削除 var triggers = ScriptApp.getProjectTriggers(); for (var i = 0; i < triggers.length; i++) { var trigger = triggers[i]; if (trigger.getHandlerFunction() == "backup") { ScriptApp.deleteTrigger(trigger); } }}