Tengo este conjunto cronjob:
* * * * * /usr/bin/systemctl suspend
Y no está funcionando. Pero puedo ejecutarlo en un shell y funciona. No entiendo lo que podría no estar funcionando.
EDITAR
error de redireccionamiento de salida para /tmp/error
da esto:
Failed to issue method call: Access denied
Failed to issue method call: Access denied
Mi pregunta es entonces: ¿Se ejecutan cronjobs como un usuario especial ( cron
por ejemplo), lo que explicaría que mi usuario puede ejecutar el comando, pero no él cron
mismo?
Explicación adicional:
Este es un ejemplo mínimo para mostrar un problema que tengo en un script (eso tiene más sentido que el comando único proporcionado aquí)
systemctl
es parte desystemd
. Creo que reiniciar, apagar, suspender funcionan con un usuario no rootsystemd
. De todos modos, está funcionando en mi sistema.Por último, yo uso Linux del arco y
/bin
,/usr/sbin
,/sbin
son todos los enlaces simbólicos a/usr/bin
.
systemctl
está dentro/usr/bin
y aceptasuspend
así? ¿Qué * nix estás usando?systemctl suspend
no funciona en las distribuciones de Debian o RedHat) y, por lo tanto, explica que en realidad no desea hacer lo que está mostrando :). Además, intente agregar2> /tmp/error
o algo para capturar cualquier error que pueda estar recibiendo. Finalmente, díganos qué usuario está ejecutando este crontab.Respuestas:
Realmente no puedo responder como tal, pero creo que puedo orientarte en la dirección correcta. Encontré esto en la página de Arch Wiki de
systemd
:Esto me sugiere las siguientes posibilidades:
Tiene otro usuario conectado. ¿Quizás ha iniciado sesión a través de un tty?
cron
ejecuta sus comandos usando/bin/sh
. Por defecto , en Arch esto es un enlace simbólico a/bin/bash
. Esto significaría quecron
está iniciando un shell bash no interactivo que luego detecta que hay otra sesión de usuario ejecutándose (la suya), por lo que no tiene derecho a ejecutarse asystemctl
pesar de ejecutarse como su usuario.Entonces, si su problema se debe a
cron
que no está permitido ejecutarlosystemctl
porque ya ha iniciado sesión, es posible que pueda solucionarlo jugando con polkit, pero no tengo experiencia allí, así que no puedo ayudarlo.fuente
w
yuptime
desde los scripts ejecutados por cron. Sus salidas indicaron que solo había un usuario. Entonces, ¿esto significa que hay algún otro problema?Una solución fácil es usar el crontab de root en lugar del tuyo. Edítalo con:
en lugar de:
fuente
Citando desde aquí :
fuente
Si está utilizando el crontab del sistema, entonces olvida el campo de usuario. Tratar:
fuente
/etc/crontab
, ¿es este un crontab que creócron -e
como usuario normal?crontab -e
un usuario normal.systemctl suspend
sin sudo.Necesita usar el archivo de configuración systemd en
/etc/systemd/system
fuente