• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    INDIANCentralizovaná správa stanic a ostatních prvků v síti - automation/monitoring/alerting a dalsi devops nastroje
    DEFILA
    DEFILA --- ---
    FRANCIMOUR: macos má něco ala SElinuch?:))
    FRANCIMOUR
    FRANCIMOUR --- ---
    Tak jsem šel stepbystep:

    crony fungují... echo "hello world" do txt v pohodě,
    tak jsem zkusil find vypsat do txt taky v pohodě,
    zkusil jsem mazání s -delete a ... smaže se kus a dál už nic,
    tak jsem si to nechal vypsat do logu a Find: Operation not permitted
    * * * * 2 /usr/bin/find /Users/*/Library/Application\ Support/MobileSync/Backup -type f -mtime +60 -delete >> /Users/karel/Desktop/test.log 2>&1


    Hádám, že sice jako root, ale narážím na MacOS SIP.
    FRANCIMOUR
    FRANCIMOUR --- ---
    DRON: Ano, díky to už jsem taky vyčetl... takže root tam není. Zkusím se posunout níž a zkusit basic commands , abych zjistil zda mu nevadí něco v tom find..
    DRON
    DRON --- ---
    FRANCIMOUR: jestli to editujes pomoc crontab -e pod userem root, tak ta specifikace uzivatelw (root) za definici dne je uz navic...
    ADM
    ADM --- ---
    FRANCIMOUR: to by mohlo byt escapovanim {}, zkus to uplne vyhodit a nahradit ten -exec prostym -delete (pokud to ten jablecny find umi), jinak to zkus nejak odescapovat
    FRANCIMOUR
    FRANCIMOUR --- ---
    ADM: no já jsem to teď zkusil dát s plnou cestou:
    57 14 * * 2 root /usr/bin/find /Users/*/Library/Application\ Support/MobileSync/Backup -type f -mtime +90 -exec rm -f {} \;

    musím tam mít nějakou blbou chybu, že se to ani nechytne
    ADM
    ADM --- ---
    FRANCIMOUR: zkusil bych: plnou cestu napr. /usr/bin/find, do crontabu promennou SHELL="/path/to/shell/idealne/bash", spustit find v shellu neco jako /bin/sh -c "find blabla",
    FRANCIMOUR
    FRANCIMOUR --- ---
    DEFILA: OK tak jsem se podvolil a enabloval roota. crontab -e

    30 14 * * 2 root find /Users/*/Library/Application\ Support/MobileSync/Backup -type f -mtime +90 -exec rm -f {} \;

    ale tam mrcha se v uvedený čas nepustí. system.log mlčí
    FRANCIMOUR
    FRANCIMOUR --- ---
    DEFILA: Od roota se snsžím držet co nejdál, protože MacOS už párkrát měl idsues s rootem. Přepravňocat se mi to pro admina taky nechce.

    Pravda je, že bych mohl mít playbook, který bych pouštěl ručně a ten by to promázl ale chtěl jsem tu udělat automatické. Zkusím se podívat na ten playbook, který by udělal ten cron.

    Ještě dodatečná otázka, na kterou mi pan G nedokázal odpovědět: existuje na MacOSu něco jako na Linuxu /etc/cron.d/cron.daily? (Nebo tak nějak, cestu už si moc nepamatuju)
    DEFILA
    DEFILA --- ---
    FRANCIMOUR:
    pointa je, ze ne tak docela, ten tvuj command

    find /Users/$UserName/Library/Application\ Support/MobileSync/Backup -type f -mtime +90 -exec rm -f {} \;

    nahradi ansible za find /Users/{{ item }}/Library/Application\ Support/MobileSync/Backup -type f -mtime +90 -exec rm -f {} \;

    kdy item, se zmeni na jmeno uzivatele, ktereh vytahe z /etc/passwd a tedy kazdy uzivatel dostane zaznam do cronu (pokud to chces takhle)
    hezci reseni mi prijde, vykaslat se na kazdeho uzivatele/server/cron, proste mit na "master" Ansiblu takovyhle(podobny) - playbook - ten poustet v nejakem casovem intervalu a nemusis mit nic na jednotlivych hostech v cronu, jelikoz si to osahas z master nodu

    a taky se muzes uplne vykaslat na definici uzivatelu, proste prohledas /Users/*/DALSI_CESTA - vsechny soubory, ktere se jmenuji Backup a proste je smazes ... (pokud mas nejakeho super-uzivatele, ktery ma pristup do vsech podadresaru)
    FRANCIMOUR
    FRANCIMOUR --- ---
    DEFILA: no ale pokud to chápu dobře tak bych to musel dělat pro každého uživatele ne?

    Já mám teď plist (txt v příloze).
    a script je:

    #!/bin/bash

    UserName=`whoami`
    find /Users/$UserName/Library/Application\ Support/MobileSync/Backup -type f -mtime +90 -exec rm {} \;

    Ale plist hází stejně chybu exited with abnormal code: 1

    Jde mi to, že se dělají v Itunes backupy, které potřebuji po 90 mazat... na každém kompu je cca 10 uživatelů a já hledám nejvíce smooth cestu.



    DEFILA
    DEFILA --- ---
    DEFILA:
    respektive chytam uzivatele 1000 - 1999 :D
    DEFILA
    DEFILA --- ---
    FRANCIMOUR:
    mno samozrejme nevim, jak to funguje na MACu, ale je to jednodussi nez tohle v Ansiblu?
    (kdy si tim grepem chytam akorat uzivatele, kteri maji ID >= 1000, predpokladam, ze to chces pro custom uzivatele a ne pro vsechny systemovy "demony"

    - hosts: localhost
      become: yes
      tasks:
        - name: chytnu_uzivatele
          shell: 'egrep ":[1][0-9]{3}" /etc/passwd | cut -d: -f1'
          register: moji_uzivatele
    
        - name: a_pustim_cron
          cron:
            name: "cron_update"
            minute: "0"
            hour: "1"
            job: "ls -lt"
            user: "{{ item }}"
          with_items:
            - "{{ moji_uzivatele.stdout_lines }}"
    ...
    
    FRANCIMOUR
    FRANCIMOUR --- ---
    INDIAN: zkouším teď variantu přes LaunchAgents..
    Nejsem si totiž jist jestli bych přes Ansible pochodil s vytvořením cronu pro každého usera
    INDIAN
    INDIAN --- ---
    FRANCIMOUR:
    cron – Manage cron.d and crontab entries — Ansible Documentation
    https://docs.ansible.com/ansible/latest/modules/cron_module.html
    FRANCIMOUR
    FRANCIMOUR --- ---
    Hoj,

    zase dotaz..

    potřebuju vytvořit cron pro každého uživatele na MacOSu .. existuje nějaká jednodušší varianta, než to dělat ručně? Idealně aby se to pouštělo z jednoho místa a bez root?
    MUXX
    MUXX --- ---
    DEFILA: To neznam. Prozkoumam, diky za tip.
    DEFILA
    DEFILA --- ---
    MUXX: tak však se localhost explicitně nevyhodnocuje, ne? Tedy poslat vše na tvé hosty a pokud to je OK, tak v posledním kroku localhost... Nebo jsem něco minul?
    MUXX
    MUXX --- ---
    Udelal jsem si v ansible task na update OS i s rebootem. Ted jsem ale narazil na to, ze bych chtel updatovat i OS linuxu na kterym ten playbook poustim. Tim si ale zabiju ten prave bezici playbook. Task poustim pres Jenkins. Neresil nekdo podobnou vec? Napada me leda udelat to tak, ze pouziju dve VM. Nejdriv updatnu jednu a dozvim se vysledek a z te updatnute pak updatnu druhou a mam vysledek. Prehlizim nejaky jednodussi reseni?
    DRON
    DRON --- ---
    INDIAN: jj, neprijemne je, ze takto lze elegantne klice pridavat, ale pokud nejakeho uzivatele degradujes, klice se neodeberou. V tomto pripade by centralni autentizace mohla byt resenim.
    Kliknutím sem můžete změnit nastavení reklam