public void Start() { running = true; while (running) { List <Database> list = ReadFromXML(); foreach (Database d in list) { ConnectionData connectionData = new ConnectionData(d.ConnectionString); var builder = new System.Data.SqlClient.SqlConnectionStringBuilder(d.ConnectionString); string database = builder.InitialCatalog; BackupManager backupManager = new BackupManager(connectionData); string lastRunResult = string.Empty; using (var connection = JobStorage.Current.GetConnection()) { var recurringJobs = connection.GetRecurringJobs(); if (recurringJobs.Count == 0) { RecurringJob.AddOrUpdate(database, () => BackupM.BackupDB(connectionData, database), d.Cronos); } else { var job = recurringJobs.FirstOrDefault(p => p.Id.Equals(database)); if (job != null) { try { if (job.LastJobId != null) { var jobState = connection.GetStateData(job.LastJobId); lastRunResult = jobState.Name; if ((!job.Cron.Equals(d.Cronos)) || (lastRunResult.Equals("Failed")) || (lastRunResult.Equals("Expired"))) { RecurringJob.AddOrUpdate(database, () => BackupM.BackupDB(connectionData, database), d.Cronos); } } } catch (Exception e) { Log.Error("Eroor job", e.Message); } } else { RecurringJob.AddOrUpdate(database, () => BackupM.BackupDB(connectionData, database), d.Cronos); } } } } FTP.FtpConnectionInfo ftpCon = ReadFTPFromXML(); FTP.FTPClient fTPClient = new FTP.FTPClient(ftpCon.Host, ftpCon.Username, ftpCon.Password); foreach (var p in BackupM.dict) { fTPClient.UploadFile(p.Value); } } }