必须导出哪个 ENV 才能使 bash cronjob 脚本以正确的语言打开程序?
如果我在命令行中手动打开 bash 脚本,程序就会以正确的语言打开。
但是如果通过cronjob打开该程序,程序却通过错误的语言运行?
我检查过,LANG ENV 不能在 Crontab 中使用相同的语言。
提前致谢。
答案1
总结您需要设置LC_ALL
或LC_MESSAGES
。例如:
LC_ALL=en_US.utf8
您的机器支持的所有语言环境列表可以通过以下方式获取:locale -a
并locale -av
了解更多详细信息。
细节
从crontab(5)
手册页 ( man -S5 crontab
) 中:
crontab 中的活动行是环境设置或 cron 命令。环境设置的格式如下:
name = value
Content-Type:
默认情况下,cron 使用 的标题 发送邮件,text/plain
并将charset=
参数设置为charmap/codeset
启动 crond(8) 的语言环境,即,如果没有LC_*
设置环境变量,则为默认系统语言环境,或由环境变量指定的语言环境LC_*
(请参阅 )。通过将crontab 中的和 变量locale(7)
设置为这些名称的邮件标题的正确值,可以使用不同的字符编码来邮寄 cron 作业输出。CONTENT_TYPE
CONTENT_TRANSFER_ENCODING
从locale(7)
手册页 ( man -S7 locale
) 中:
LC_MESSAGES
此类别会影响显示消息的语言以及肯定或否定答案的形式。GNU C 库包含gettext(3)
、ngettext(3)
和rpmatch(3)
函数,以简化此信息的使用。LANGUAGE
如果将类别设置为除 之外的有效语言环境,GNU gettext 系列函数还会遵循环境变量(包含以冒号分隔的语言环境列表)C
。此类别还会影响 的行为catopen(3)
。
LC_ALL
上述所有的。
要对进程的环境进行故障排除,您可以使用以下命令显示它。 替换<PID>
为仍在运行的 cron 作业的进程 ID。 您需要使用至少需要几分钟的 cronjob 进行测试(例如sleep 300
)。
ps e -wwp <PID>