cronjob load system environment

调用时使用 BASH_ENV 变量

  • 调用脚本时使用 BASH_ENV 从文件中读取变量
1
2
$ crontab -l
* * * * * BASH_ENV=/etc/profile /home/baeldung/print_envs.sh
  • 导入多个变量文件时,可将导入变量命令写入脚本中,使用 BASH_ENV 调用脚本

    • 写入导入变量脚本
    1
    2
    3
    4
    5
    6
    7
    
    $ cat /home/baeldung/preload.sh
    #!/bin/bash
      
    . /etc/profile
    . ~/.bash_profile
    . ~/.bashrc
    export LEARNING_FROM=baeldung
    
    • 配置环境变量
    1
    2
    
    $ crontab -l
    * * * * * BASH_ENV=/home/baeldung/preload.sh /home/baeldung/print_envs.sh
    

Wrapping the Job With Bash

  • 如果一个作业不是 bash 脚本,无法使用 BASH_ENV 来加载环境变量,可以使用 bash 包装它
1
2
$ crontab -l
* * * * * BASH_ENV=/etc/profile bash -c "printenv > /tmp/print_envs_result"
  • 从多个文件中读取变量

    • 将读取变量文件和执行 job 封装在一个 shell 脚本中
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    $ cat /home/baeldung/wrap_printenv.sh
    #!/bin/bash
      
    . /etc/profile
    . ~/.bash_profile
    . ~/.bashrc
    export LEARNING_FROM=baeldung
      
    #now, we run the original job
    printenv > /tmp/print_envs_result
    
    • 配置 cronjob
    1
    2
    
    $ crontab -l
    * * * * * /home/baeldung/wrap_printenv.sh
    

在 crontab 设置中配置单个变量

  • 在 crontab 中使用 key=valule 的格式配置单个变量
1
2
$ crontab -l
* * * * * LEARNING_FROM=baeldung LANG=es_US /home/baeldung/print_envs.sh

参考