En ese caso particular, creo que puedes usar el shutdown. comando con sudo y los argumentos apropiados para programar el sueño en un momento específico.
¿Cuál es la tarea que debes hacer y por qué dormir exactamente 4 horas?
Thorbjørn Ravn Andersen
Respuestas:
46
Se usa sudopara iniciar un shell raíz donde ejecuta los comandos:
sudo bash -c 'sleep 4h; command'
Todos los comandos que se ejecutan en el shell raíz se ejecutan con permisos de root, lo sleepque no hace daño. Si necesita ejecutar un comando con permisos de usuario, use sudo -u USERNAME COMMAND, por ejemplo:
$ sudo bash -c 'sleep 4h; sudo -u dessert whoami; whoami'
dessert # whoami run as user dessert
root # whoami run as root
Sí, ates la herramienta adecuada para este trabajo, ya que también se encarga de la redirección de E / S, no bloquea una ventana de shell y funciona incluso cuando el usuario se ha desconectado o la máquina se ha reiniciado desde entonces.
Simon Richter
44
@SimonRichter: sudo bash -c 'sleep 4h && command' &poner sudo en segundo plano es una manera más fácil de no bloquear una ventana / pestaña de shell. Si desea que la salida aparezca de forma asincrónica como un recordatorio de que sucedió, eso es más fácil. No funciona en todos los reinicios, pero dependiendo de su nohupconfiguración, puede permanecer ejecutándose después de salir / cerrar sesión desde un shell.
Peter Cordes
44
Tenga en cuenta que atejecuta el comando tan pronto como sea posible cuando el sistema se suspende a la hora especificada, consulte aquí en U&L ; dependiendo de los comandos para ejecutar, esto puede no ser lo que desea.
postre
2
Solo una sugerencia, también puede usar systemctl para verificar el estado del servicio en lugar de llamar directamente a ese script init.d. Si bien ambos aparentemente tienen el mismo resultado, creo que debería preferirse la forma moderna de interactuar con los servicios de systemd:systemctl status atd
Byte Commander
15
Una forma es ejecutar a través de un shellscript con sudopermisos (y dar la contraseña, cuando inicie el shellscript), si el shellscript está en el directorio actual,
sudo ./delayer 4h
donde delayerpuede haber un shellscript con el contenido
#!/bin/bash
sleep "$1"
command
Hazlo ejecutable con
chmod +x delayer
y cópielo o muévalo a un directorio PATHsi lo desea.
Si desea un shellscript más flexible, donde puede seleccionar el comando [línea] para retrasar ingresando los parámetros, puede intentar
Bueno, si es /bin/shsintaxis, estará bien. Pero si tiene la intención de usar características específicas de bash, entonces shebang es necesario. Steeldriver y yo tuvimos una discusión sobre eso en alguna parte. Aa y Videonauth borraron su comentario antes de que pudiera responder adecuadamente. Oh bien
Sergiy Kolodyazhnyy
@SergiyKolodyazhnyy, tienes razón. Entonces, en este caso, el shebang está ahí para hacer que el shellscript sea robusto en caso de características adicionales donde la sintaxis puede diferir.
sudodus
@SergiyKolodyazhnyy Bueno, fue solo una sugerencia, así que pensé que dejar el comentario allí no era necesario y solo agregaría desorden. Siéntase libre de
contactarme
2
Otra forma sería iniciar la sesión interactiva de sudo con sudo -s(no cambia el directorio) o sudo -i(cambia el directorio actual al directorio de inicio raíz) y luego ingrese sus comandos (sin sudo)
shutdown
. comando con sudo y los argumentos apropiados para programar el sueño en un momento específico.Respuestas:
Se usa
sudo
para iniciar un shell raíz donde ejecuta los comandos:Todos los comandos que se ejecutan en el shell raíz se ejecutan con permisos de root, lo
sleep
que no hace daño. Si necesita ejecutar un comando con permisos de usuario, usesudo -u USERNAME COMMAND
, por ejemplo:Otro enfoque sería usar
sudo visudo
para permitir la ejecución del comando sin acceso a la raíz, ver: ¿Cómo permitir la ejecución sin solicitar una contraseña usando sudo?Tenga en cuenta que dependiendo del comando esto puede crear una falla de seguridad.
fuente
Suponiendo que solo desea ejecutar el proceso una vez (no, por ejemplo, cada 4 horas), puede usar
atd
/etc/init.d/atd status
o mejor aúnsystemctl status atd
)En una terminal como root, ejecute su comando de la siguiente manera:
Si desea ejecutarlo cada 4 horas, también puede usar cron (como root) con la siguiente configuración en su crontab
fuente
at
es la herramienta adecuada para este trabajo, ya que también se encarga de la redirección de E / S, no bloquea una ventana de shell y funciona incluso cuando el usuario se ha desconectado o la máquina se ha reiniciado desde entonces.sudo bash -c 'sleep 4h && command' &
poner sudo en segundo plano es una manera más fácil de no bloquear una ventana / pestaña de shell. Si desea que la salida aparezca de forma asincrónica como un recordatorio de que sucedió, eso es más fácil. No funciona en todos los reinicios, pero dependiendo de sunohup
configuración, puede permanecer ejecutándose después de salir / cerrar sesión desde un shell.at
ejecuta el comando tan pronto como sea posible cuando el sistema se suspende a la hora especificada, consulte aquí en U&L ; dependiendo de los comandos para ejecutar, esto puede no ser lo que desea.systemctl status atd
Una forma es ejecutar a través de un shellscript con
sudo
permisos (y dar la contraseña, cuando inicie el shellscript), si el shellscript está en el directorio actual,donde
delayer
puede haber un shellscript con el contenidoHazlo ejecutable con
y cópielo o muévalo a un directorio
PATH
si lo desea.Si desea un shellscript más flexible, donde puede seleccionar el comando [línea] para retrasar ingresando los parámetros, puede intentar
Ejemplo de demostración (demora corta, 5 segundos, para fines de demostración),
fuente
/bin/sh
sintaxis, estará bien. Pero si tiene la intención de usar características específicas de bash, entonces shebang es necesario. Steeldriver y yo tuvimos una discusión sobre eso en alguna parte. Aa y Videonauth borraron su comentario antes de que pudiera responder adecuadamente. Oh bienOtra forma sería iniciar la sesión interactiva de sudo con
sudo -s
(no cambia el directorio) osudo -i
(cambia el directorio actual al directorio de inicio raíz) y luego ingrese sus comandos (sin sudo)fuente