trabalho cron enviando e-mails em um charset errado

5

Eu tenho o seguinte comando em um cronjob:

*/5 * * * * php /var/www/domain/yii rss/parse

Ele envia e-mails em um conjunto incorreto:

Content-Type: text/plain; charset=ANSI_X3.4-1968

Mas quando eu lanço esse comando diretamente na CLI e o envio para um log:

php /var/www/domain/yii rss/parse > log

Eu recebo a codificação correta - UTF-8

Já tentou definir o idioma em / etc / environment:

LANG=en_US.UTF-8

Reiniciou o cron, mas ainda usa o ANSI via CRON. Alguma idéia?

    
por Alexander Kim 05.11.2014 / 10:51

4 respostas

10

Resolvi meu problema adicionando um crontab:

crontab -e

No topo do arquivo que escrevi:

CONTENT_TYPE="text/plain; charset=utf-8"

Agora, todos os meus e-mails de trabalho do cron estão em Charset UTF-8.

    
por 05.11.2014 / 13:13
1

Eu tive que resolver esse problema globalmente para todos os usuários e não para um específico. Eu tentei configurar / etc / environment e / etc / default / locale, em seguida, reinicie o cron. Isso não ajudou. A resposta certa para mim foi usar o comando env no script upstart (estou executando o servidor Ubuntu):

env LC_ALL = en_US.UTF-8

cat /etc/init/cron.conf 
# cron - regular background program processing daemon
#
# cron is a standard UNIX program that runs user-specified programs at
# periodic scheduled times

description     "regular background program processing daemon"

start on runlevel [2345]
stop on runlevel [!2345]

expect fork
respawn
env LC_ALL=en_US.UTF-8

exec cron

Então eu reiniciei o cron e recebi o email correto no utf-8.

    
por 18.05.2015 / 08:30
1

Referindo-se a este problema, encontrei no Debian Jessie em / etc / default / cron o seguinte:

# Whether to read the system's default environment files (if present)
# If set to "yes", cron will set a proper mail charset from the
# locale information. If set to something other than 'yes', the default
# charset 'C' (canonical name: ANSI_X3.4-1968) will be used.
#
# This has no effect on tasks running under cron; their environment can
# only be changed via PAM or from within the crontab; see crontab(5).
READ_ENV="yes"

Em outras palavras, o padrão é que nesta distribuição ele leia os arquivos do ambiente. Depois de reexecutar dpkg-reconfigure locales (no meu caso o padrão já estava definido como UTF8) eu olhei para / etc / environment e descobri que estava vazio. Depois de inserir LC_ALL=en_US.UTF-8 , os e-mails da tarefa do cron estavam com o cabeçalho correto do conjunto de caracteres.

    
por 29.11.2017 / 19:10
0

Quando você dá o comando pela CLI, você tem o chatset utf-8, eu acho, porque você está usando um MAC OS PC ou Linux PC

Eu disse isso porque o LANG atual do seu PC começa copiado em sua sessão ssh

grep -i LANG /etc/ssh/sshd_config 
AcceptEnv LANG LANGUAGE LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES

do man sshd_config

AcceptEnv
             Specifies what environment variables sent by the client will be copied into the session’s environ(7).  See SendEnv in ssh_config(5) for how to
             configure the client.  Note that environment passing is only supported for protocol 2.  Variables are specified by name, which may contain the
             wildcard characters ‘*’ and ‘?’.  Multiple environment variables may be separated by whitespace or spread across multiple AcceptEnv directives.
             Be warned that some environment variables could be used to bypass restricted user environments.  For this reason, care should be taken in the
             use of this directive.  The default is not to accept any environment variables.

Seu processo crond está usando charset = ANSI_X3.4-1968, talvez este seja o LANG do sistema padrão, mas se você quiser mudar isso

 man 5 crontab
    
por 05.11.2014 / 12:58