Execute o comando screen com a variável & tick através do cron (cron run .sh)

0

Eu corro o comando screen através do cron, onde os códigos estão em lorem.sh files.

Estes são os códigos cron: * * * * * cd /home/z; ./lorem.sh

Por dentro de lorem.sh :

screen -S screenname -X stuff $'3[B'
sleep 1 && screen -S screenname -X stuff 2
sleep 1 && screen -S screenname -X stuff "lorem ipsum dolor"
sleep 1 && screen -S screenname -X stuff $'\n'

Acima de lorem.sh códigos: a primeira linha é "Seta para baixo" e a quarta linha é "Enter"

Ao executar lorem.sh por meio do cron, apenas segundos & terceira linha trabalhando.

Acima de lorem.sh funciona bem se for executado a partir do terminal digitando ./lorem.sh mas não funcionando a partir do cron

    
por apasajja 02.09.2014 / 13:40

1 resposta

2

A maioria das versões dos comandos cron run usa /bin/sh por padrão, e se os comandos executam scripts de shell (que não possuem uma linha #! para forçar o uso de um shell específico), /bin/sh ser usado para executá-los também.

Em alguns sistemas, /bin/sh é dash , um shell que não entende o convenção de cotação ANSI-C usada por bash e outros shells. Portanto, sua string $'\n' provavelmente está sendo interpretada como a string de três caracteres $\n .

A maioria das versões de cron permite que você especifique um shell para executar seus comandos. Você pode usar o bash editando seu crontab para adicionar uma linha

SHELL=/bin/bash

que vem antes de qualquer linha que agende trabalhos.

Como alternativa, você pode fazer com que lorem.sh sempre use bash adicionando

#!/bin/bash

como sua primeira linha.

    
por 04.09.2014 / 16:09