OffVPSOFFSHORE VPSDestek

Küçük otomasyonlar

Küçük bir zamanlanmış işe net bir sınır verin.

Güvenilir küçük bir işin net bir bitişi, sonucunun kaydı ve çok erken gelen ikinci bir çalışma için bir kuralı vardır. Saatlik veya günlük bir program seçmeden önce bu davranışları seçin.

OffVPS saha kılavuzu · İncelendi · 5 dk okuma

Tek bir sonlu iş parçası tanımlayın

Mevcut kayıtlarından küçük bir günlük özeti yeniden oluşturan kişisel bir araç düşünün. İş, sınırlı bir veri kümesini okur, bir yedek özet hazırlar ve çıkar. Bir web sunucusu değildir ve zamanlanmış başlangıçlar arasında çalışmaya devam etmemelidir. Bir zamanlayıcı eklemeden önce girdiyi, hedefi, beklenen süreyi ve neyin başarı sayıldığını yazın.

Örnek, systemd ve util-linux içeren bir Linux ana bilgisayarı flock, yönetici erişimi ve adı verilen mevcut ayrıcalıksız bir hesap ve grubu varsayar fieldjob. İncelenmiş iş betiği şurada bulunur: /opt/field-jobs/build-summary ve ön planda çalışır. Bu betiğin sahibi bir yöneticidir; iş hesabı onu okuyup çalıştırabilir ancak kodunu yeniden yazamaz. Dağıtımınızdaki çalıştırılabilir yolları kontrol edin. Bunlar şablonlardır, kurulu bir OffVPS zamanlama hizmeti değildir.

Betik, sıfır olmayan bir çıkış durumuyla başarısızlığı bildirmelidir. Değiştirme dosyaları için, yayınlamadan önce geçici bir sonuç hazırlayıp kontrol edecek şekilde tasarlayın. Veritabanı işleri için veritabanının işlem veya yinelenenleri kaldırma mekanizmasını kullanın. Tek başına bir kilit, kısmen tamamlanmış bir görevi tekrarlamak için güvenli kılamaz.

Bir saat dilimi ve kaçırılan çalışma politikası seçin

Özetimiz günde bir kez 02:15 UTC'de kullanışlıdır. Makinenin yerel saat diliminin görünmez bir bağımlılık olmaması için açık bir bölge kullanın. UTC bu örnekte mevsimsel saat değişikliklerini önler; yerel sivil saate bağlı bir iş görevi adlandırılmış bir saat dilimi ve yaz saati davranışının gözden geçirilmesini gerektirir. systemd zaman referansı takvim ifadelerini açıklar.

Bu şablonu şu adla kaydedin: /etc/systemd/system/field-summary.timer adları gözden geçirdikten sonra amaçlanan VPS'te:

[Unit]
Description=Daily personal-tool summary

[Timer]
OnCalendar=*-*-* 02:15:00 UTC
Persistent=true
Unit=field-summary.service

[Install]
WantedBy=timers.target

Persistent=true bir takvim olayı kaçırıldıysa, etkin olmayan bir dönemden sonra bir yakalama etkinleştirmesi ister. Kaçırılan her gün için ayrı bir çalışmayı yeniden oynatmaz. Bir zamanlayıcı, o hizmet etkinken aynı hizmetin başka bir örneğini de başlatmaz. Bu davranışlar ve zamanlama doğruluğu şurada ele alınmıştır: zamanlayıcı referansı. Yakalamayı etkinleştirmeden önce geç bir özetin kullanışlı olup olmadığına karar verin.

Hizmet kullanıcısını, durum dizinini ve kilidi ayarlayın

Eşleşen /etc/systemd/system/field-summary.service işi tanımlar:

[Unit]
Description=Build the personal-tool summary

[Service]
Type=oneshot
User=fieldjob
Group=fieldjob
WorkingDirectory=/opt/field-jobs
StateDirectory=field-summary
StateDirectoryMode=0700
UMask=0077
ExecStart=/usr/bin/flock --nonblock --conflict-exit-code 75 /var/lib/field-summary/job.lock /opt/field-jobs/build-summary
TimeoutStartSec=5min
StandardOutput=journal
StandardError=journal

Type=oneshot tamamlanan bir komuta uygundur; bu örnekte açık bir başlangıç zaman aşımı sınırlar. Her çalışmadan sonra etkin olmayan duruma geçmesi gereken bir hizmete şunu eklemeyin: RemainAfterExit=yes bir hizmete. Bakınız systemd'nin hizmet semantiği. İş yükünden bir zaman aşımı ayarlayın ve beş dakikanın her işe uyduğunu varsaymak yerine kesintiyi güvenli hale getirin.

Bu sistem hizmeti için, StateDirectory adlandırılmış dizini şu altında oluşturur: /var/lib hizmet sahipliği ile. Çalışma dizini, kullanıcı, izinler ve çıktı hedefleri açıktır; betik kendi araçları ve verileri için mutlak yollar kullanmalıdır. Ortam ve dizin kuralları şurada belgelenmiştir: systemd'nin yürütme referansı. Gizli değerleri komut satırı bağımsız değişkenlerine koymayın veya günlüğe kaydetmeyin.

Engellemeyen flock sarmalayıcı, işbirliği yapan başka bir çağrı bu kilidi tuttuğunda 75 koduyla çıkar. Bunu, atlanan bir özeti tamamlanmış iş olarak değerlendirmek yerine, inceleme gerektiren görünür bir başarısızlık olarak bırakıyoruz. Tüm manuel çağrılar aynı sarmalayıcıyı ve kilit yolunu kullanmalıdır. Çalışan bir işi serbest bırakmak için kilit dosyasını silmeyin: yeni bir dosya ayrı bir kilit oluşturabilir. Bu, yerel dosya sistemi desenidir, VPS örnekleri arasında dağıtılmış bir kilit değildir. Bakınız upstream flock kılavuzu.

Dosyaları kontrol edin, ardından bir kontrollü çalışma deneyin

İlk çalıştırma için giden e-posta, ödemeler ve diğer yan etkileri devre dışı bırakılmış tek kullanımlık bir veri kümesi kullanın. Etkinleştirmeden önce, o test ana bilgisayarındaki ayrıştırılmış programı ve birim dosyalarını inceleyin:

systemd-analyze calendar '*-*-* 02:15:00 UTC'
systemd-analyze verify /etc/systemd/system/field-summary.service /etc/systemd/system/field-summary.timer

Bu kontroller birim ve program hatalarını yakalayabilir; betiğinizin doğru bir özet ürettiğini kanıtlayamazlar. systemd-analyze referansı kapsamlarını açıklar. Hataları düzelttikten sonra, incelenen dosyaları yükleyin ve test işini açıkça başlatın:

sudo systemctl daemon-reload &&
  sudo systemctl start field-summary.service
systemctl status field-summary.service --no-pager
sudo journalctl -u field-summary.service --since "10 minutes ago" --no-pager

Sonlu bir başarılı çağrı ve denetlenmiş bir çıktı artefaktı bekleyin; başarılı bir oneshot sonrasında etkin olmayan durum gösterebilir. Boş girdi davranışı dahil olmak üzere sonucun kendisini inceleyin. Yalnızca test amaçlı bir çalıştırmayı bilinçli olarak yavaşlatın, test veri kümesi üzerinde aynı kilitli komutu iki kez çağırın ve ikinci çağrının rakip bir sonuç yazmadan kilit çekişmesi bildirdiğini doğrulayın.

Programı yalnızca çıktısını kontrol ettikten sonra etkinleştirin

sudo systemctl enable --now field-summary.timer
systemctl list-timers field-summary.timer --all

Bir sonraki planlanmış zamanı kontrol edin, ardından ilk planlanmış sonucu inceleyin. Başlangıç zamanını, bitiş zamanını, işlenen öğe sayısını ve sonucu betiğin günlüklerinde tutun. Başarı kaydının bulunmaması, işin çalıştığının kanıtı değil, inceleme nedenidir. Şu kaynağa bakın: systemctl'nin zamanlayıcı ve etkinleştirme komutları.

Gelecekteki başlatmaları duraklatmak için şunu kullanın: sudo systemctl disable --now field-summary.timer. Bu, halihazırda çalışmakta olan bir hizmeti sonlandırmaz. Kesinti gerekiyorsa, önce mevcut yazma işleminin güvenle durdurulup durdurulamayacağını belirleyin. İş büyüdükçe süreyi, yeniden denemeleri ve harici API sınırlarını gözden geçirin; birden fazla makine paylaşılan koordinasyon gerektirir. Şununla devam edin: kişisel araçlar senaryosu ve bir geri yükleme alıştırması bu otomasyonun yönettiği veriler için.

Kullanılan belgeler

Bu sayfa için birincil referanslar. Kendi ortamınızda kurulu sürüme ilişkin belgeleri kontrol edin.