macos - hay - recuperar usuario administrador mac
Ejecute un script de shell periódicamente en Mac OS X sin permiso de root (2)
¿Alguna razón en particular por la que no quieres usar un crontab normal?
% echo "* * * * * /Users/paul/Desktop/1.sh" | crontab -
Este comando debe agregar un trabajo cron que se ejecuta una vez por minuto.
TEN EN CUENTA que este comando también reemplazará cualquier crontab que ya tengas. El comando crontab -
debe usarse con precaución, como un atajo.
Si desea editar un crontab existente, para evitar borrar trabajos previamente configurados, puede usar crontab -e
. (Si inicia vim
y no sabe cómo usar vim
, puede salir presionando ESC : q ! Ingrese y luego vaya a buscar la documentación del editor).
Si desea instrucciones sobre cómo editar crontabs, escriba man crontab
en su shell. Si desea información de sintaxis en el archivo crontab, man 5 crontab
le mostrará eso.
¡Disfrutar!
ACTUALIZACIÓN: (por comentarios)
Para ejecutar su trabajo cada 30 segundos se requiere un simple corte. Cron solo ejecuta trabajos por minuto, por lo que para ejecutar las cosas cada 30 segundos, puede tener dos trabajos, uno de los cuales tiene un retraso de 30 segundos. Por ejemplo:
#Mn Hr Da Mo DW Command
* * * * * /Users/paul/Desktop/1.sh
* * * * * sleep 30; /Users/paul/Desktop/1.sh
Espero que esto ayude.
Quiero iniciar un archivo con .sh tipo o .py en mac os x sin usar root, busqué en google y encontré launchctl me puede ayudar,
entonces leí el tutorial y hago lo mismo en el tutorial pero no funciona para mí, [i usando mac os x 10.9 x64]
Mi archivo .plist [ejecuta el archivo 1.sh cada 60 segundos]:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.alvin.crontabtest</string>
<key>ProgramArguments</key>
<array>
<string>/Users/paul/Desktop/1.sh</string>
</array>
<key>Nice</key>
<integer>1</integer>
<key>StartInterval</key>
<integer>60</integer>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/tmp/AlTest1.err</string>
<key>StandardOutPath</key>
<string>/tmp/AlTest1.out</string>
</dict>
</plist>
fuente de 1.sh:
echo ''+'' >> /Users/paul/Desktop/worked.txt
Puse Run.plist en /Users/paul/Run.plist
y ejecuta el comando desde la terminal:
launchctl load /Users/paul/Run.plist
Launchctl start com.alvin.crontabtest
los comandos se ejecutan sin ningún error pero no veo nada en working.txt
¿alguien puede ayudarme por favor?
Para aclarar: el archivo .plist
del OP en sí estaba perfectamente bien - el problema resultó estar dentro del script de shell invocado (no se muestra en la pregunta).
En OS X, el uso de los archivos .plist
cargados por CLI launchctl
e invocados por el administrador de daemon launchd
es la forma preferida de tareas de programación (recurrentes) (consulte más abajo para obtener más información).
Cosas a tener en cuenta:
- El formato de los archivos
launchd
.plist
se describe en https://developer.apple.com/library/mac/documentation/Darwin/Reference/Manpages/man5/launchd.plist.5.html oman launchd.plist
- Para que se cargue un archivo
.plist
cada vez que el usuario actual inicia sesión , debe colocarse en~/Library/LaunchAgents/
( los archivos de todos los usuarios deben colocarse en/Library/LaunchAgent/
- requiere privilegios de administrador). - Especificar archivos de captura de salida con claves
StandardOutPath
yStandardErrorPath
significa que las invocaciones sucesivas se agregan a los archivos especificados, lo que significa que estos archivos siguen creciendo indefinidamente , a menos que se administren externamente . - Solución de problemas de Re: se aplica el consejo de @Grady Player: inicie
Console.app
y busque entradascom.apple.launchd.peruser
; una falla al invocar el comando especificado en.plist
se mostraría allí.
La respuesta de @ghoti describe una alternativa general de Unix a launchd
, cron
(típicamente usado en Linux):
En cuanto a cómo cron
relaciona con OS X: @ghoti pregunta:
¿Alguna razón en particular por la que no quieres usar un crontab normal?
En OS X, man crontab
aconseja (énfasis añadido):
Aunque cron (8) y crontab (5) son oficialmente compatibles con Darwin [OS X], su funcionalidad ha sido absorbida en launchd (8) , que proporciona una forma más flexible de ejecutar comandos automáticamente . Ver launchctl (1) para más información.
La conclusión es esta:
- Si proviene de un fondo * nix , puede estar más cómodo con continuar usando
cron
ycrontab
, suponiendo que:- usted es consciente del hecho de que pueden existir tareas de fondo adicionales, programadas a través de
launchd
. - usted conoce las limitaciones de
cron
y puede trabajar con / alrededor de ellos.
- usted es consciente del hecho de que pueden existir tareas de fondo adicionales, programadas a través de
- De lo contrario, en OS X :
- muchas aplicaciones de terceros utilizan la función
launchd
nativa y especifican tareas de fondo periódicas a través de archivos.plist
en/Library/LaunchAgents
(para todos los usuarios) o~/Library/LaunchAgents
(para el usuario actual). - Si desea centralizar la administración de tareas en segundo plano en estas ubicaciones y / o desea aprovechar la mayor flexibilidad que proporciona
launchd
, especifique las tareas en segundo plano mediante archivos.plist
evaluados porlaunchd
.
- muchas aplicaciones de terceros utilizan la función
Agregar tareas cron
simples es probablemente más simple que crear archivos .plist
para launchd
, pero las utilidades de terceros como Lingon 3 pueden ayudar con la última.
Además, existen diferencias sutiles en la forma en que se invocan las tareas cron
frente a las tareas de launchd
por usuario: por ejemplo, las primeras no permiten la interacción del usuario a través de AppleScript, mientras que las últimas sí.
Un ejemplo es la mayor flexibilidad de launchd
: el OP, en un comentario de seguimiento, solicita que la tarea se ejecute cada 30 segundos:
El intervalo mínimo para las tareas
cron
es de 60 segundos , lo que requiere la solución en la respuesta de @ghoti.Por el contrario, con el archivo
.plist
launchd
, cambiar<key>StartInterval</key><integer>60</integer>
a<key>StartInterval</key><integer>30</integer>
es suficiente.