Eu tenho um arquivo update.sh, que é executado todas as noites
Eu li isso como "Estou lançando isso via cron". Um problema muito comum que as pessoas têm com o cron é que elas fazem expectativas sobre o ambiente em que o script é executado. Eles assumem que o script será executado em seu diretório pessoal.
Isso é exatamente o que você está fazendo. Todos os seus comandos sed
usam caminhos relativos para funcionar quando você está no diretório correto ... Mas é cron
no mesmo diretório? Provavelmente não.
Você tem uma escolha de correções aqui:
- Use caminhos absolutos em todos os seus comandos de script, como
/home/bob/dir/file
- Transforme seu script
cd
no diretório correto (use um caminho absoluto) na parte superior do script. -
Faça seu comando cron
cd
no diretório correto antes de operar, por exemplo:00 00 * * * cd /home/bob && ./update.sh
No comentário sobre permissões, se você não tiver permissões de gravação para fazer um sed
no local, você poderia simplesmente enviar para algum lugar onde você tem permissões de gravação, por exemplo:
sed "s/tk[0-9]*;/tk$company_id;/1i" resources/sql/create_tk.sql > $HOME/temp.sql
mysql -h $mysql_host -u $mysql_id "-p$mysql_pwd" < $HOME/temp.sql
rm $HOME/temp.sql#
Ou você pode, na verdade, apenas canalizar do sed
para o mysql
:
sed "s/tk[0-9]*;/tk$company_id;/1i" resources/sql/create_tk.sql \
| mysql -h $mysql_host -u $mysql_id "-p$mysql_pwd"
Essas abordagens não alteram os arquivos resources/sql/*.sql
originais, portanto, se você precisar editá-los, será necessário corrigir seus problemas de permissões (sejam eles quais forem; use stat filename
para ver o que está acontecendo)