IDK*_*IDK 2 bash scripts cron bashrc
/home/my_username/.bashrc
我正在尝试使用由 crontab 执行的 shell 脚本中定义的函数。
#crontab -l
# m h dom mon dow command
* * * * * /bin/sh /home/my_username/CronTab_shell_script.sh >> /home/my_username/Desktop/file.log
Run Code Online (Sandbox Code Playgroud)
假设我将 Mounted() 函数保存在
/home/my_username/.bashrc
function mounted(){
if mount|grep $1; then
echo "mounted"
else
echo "not mounted"
fi
}
Run Code Online (Sandbox Code Playgroud)
如何从
/home/my_username/CronTab_shell_script.sh
Run Code Online (Sandbox Code Playgroud)
* * * * * /bin/sh .....
Run Code Online (Sandbox Code Playgroud)
你不是在运行bash
,你是在运行sh
,所以你不应该期望.bashrc
被加载!
试试这个:
* * * * * /bin/bash .....
Run Code Online (Sandbox Code Playgroud)
另一个问题可能是 Ubuntu 的默认.bashrc
脚本以这个守卫开头:
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
Run Code Online (Sandbox Code Playgroud)
您在下面添加的任何行都不会被您的 cron 脚本加载,因为 cronjobs 不在交互式环境中运行。
解决方案:将脚本的函数置于此防护之上。为该防护之下的用户保留设置。
在某些系统上,我发现最容易使用它--login
来确保 shell 加载的内容与我在命令行中加载的内容相同。
* * * * * bash --login /path/to/script.sh
* * * * * bash --login -c "your command here"
Run Code Online (Sandbox Code Playgroud)