大げさな表現を使いましたが、以下のように crontab で bash -l や source ~/.bashrc を使うのはアンチパターンだと思います。
# BAD
0 8 * * * /bin/bash -l -c 'my_daily_batch.sh'
# BAD
0 18 * * * source ~/.bashrc && 'my_evening_batch.sh'
なぜ ~/.bashrc を読み込みたいのか
周知の通り Cron はコマンドを ~/.bashrc を読み込んでいない環境で実行するのですが、これは初心者泣かせでもあります:
「コマンドラインだと成功するのに、cronだとエラーになるんです!どうしたらいいですか!?」
そして、ググって最初に見つけるのが source ~/.bashrcや bash -l を使う方法です。まぁ、それでうまく動くかもしれません。当面の間は・・・。
~/.bashrc を読み込むと何が困るのか
~/.bashrc に手を加える時の影響範囲が大きくなるからです。
ログイン時のシェルなどでも使うものなので「Ruby 2.4 を使うよう$PATHを変えよう」などと変更するのはよくあることです。
しかし、それが Cron のジョブを失敗させてしまうかもしれません。悪いことに、~/.bashrc を見ただけでは、それが crontab から読み込まれているのが分かりません。
代替案
cron 用に別の設定ファイルを用意しましょう。ジョブごとに別々に設定ファイルを作るとベター。
# GOOD
0 8 * * * source ~/cronjobs/env/my_daily_batch.env.sh && my_daily_batch.sh
0 18 * * * source ~/cronjobs/env/my_evening_batch.env.sh && my_evening_batch.sh
これで、~/.bashrc を気兼ねなく書き換えられるようになります。