Eu não gosto, mas uma solução é modificar imediatamente a linha 1 do trabalho recém-spool.
master@chopin~/dev Sat Mar 10,20:52:58$ (4800) atq
616 Tue Mar 13 19:17:00 2012 a master
589 Mon Mar 12 16:16:00 2012 a master
617 Tue Mar 13 19:35:00 2012 a master
591 Mon Mar 12 16:23:00 2012 a master
447 Wed Mar 14 09:25:00 2012 a master
586 Mon Mar 12 15:45:00 2012 a master
master@chopin~/dev Sat Mar 10,20:53:01$ (4800) at -c 447
#!/bin/sh
# atrun uid=1000 gid=1000
# mail master 0
umask 22
...
Então, essa estratégia seria escrever um wrapper em cima de at
que
-
intercepta seu $ jobid quando at
é executado abaixo Não é necessário
- altera a linha de shell shebang do arquivo mais recente em / var / spool / cron / atjobs /:
sudo <<< 'cd /var/spool/cron/atjobs/ && sed -i -e "1s/\#!\/bin\/sh/\#!\/bin\/bash/" $(ls -1t |head -n1)'
Pode ser uma condição de corrida no caso do intervalo de tempo at now
por si mesmo, a menos que talvez um tempo adicional (como 1 segundo) seja adicionado artificialmente. Embora em meus próprios casos de uso, eu realmente precise que ele seja executado agora não em 1 segundo.
De qualquer forma, esse é um sistema muito hack para fazer com que meus scripts usem confortavelmente.