在编写shell程序时,我们经常使用/bin/sh和/bin/bash.我经常使用bash,但我不知道它们之间有什么区别.
bash和之间的主要区别是sh什么?
我们究竟需要意识到在编程时bash和sh?
我正在尝试使用rbenv和cron运行ruby脚本.我知道我需要加载rbenv才能加载正确的ruby版本.
我尝试过这样的选项:
*/10****/bin/bash -c'source $ HOME/.bashrc; cd/data/app; ruby -v'>> /tmp/logfile.txt 2>&1
但由于会话不是交互式的,我没有正确的ruby版本.我找到了这样的例子:
15 14 1**export BASH_ENV =/path/to/environment &&/full/path/to/bash -c'/full/path/to/rvm_script.rb'
它没有更好的工作.然后我写了一个加载器,它只在当前shell中加载rbenv,但它不起作用.
*/1****/bin/bash -c'$ HOME/.rbenv/loader.sh; cd/data/app /; ruby -v'>> /tmp/logfile.txt 2>&1
现在我正在寻找另一种加载它的方法......任何想法?
我通过输入crontab -e在ubuntu环境中为root用户设置了cronjob
34 11 * * * sh /srv/www/live/CronJobs/daily.sh
0 08 * * 2 sh /srv/www/live/CronJobs/weekly.sh
0 08 1 * * sh /srv/www/live/CronJobs/monthly.sh
Run Code Online (Sandbox Code Playgroud)
但是cronjon不会跑.我已经尝试检查cronjob是否正在运行
pgrep cron
并提供进程ID 3033. shell脚本调用python文件,用于发送电子邮件.运行python文件是可以的.它没有错误,但是cron没有运行.daily.sh文件中包含以下代码.
python /srv/www/live/CronJobs/daily.py
python /srv/www/live/CronJobs/notification_email.py
python /srv/www/live/CronJobs/log_kpi.py
Run Code Online (Sandbox Code Playgroud) 所以我每天都有一个脚本从AWS下载文件并将其附加到电子表格中.要做到这一点,我已经建立了一个cronjob.
我手动运行时脚本工作正常,但从cronjob运行时不起作用.
代码有一行:
aws s3 cp s3://My/files/backup/ ~/home/AnPoc/ --recursive --exclude "*.tgz" --include "*results.tgz"
Run Code Online (Sandbox Code Playgroud)
在我收到的cronjob执行的电子邮件中,我看到以下错误消息:
./AnPoc/DayProcessing.sh: line 14: aws: command not found
Run Code Online (Sandbox Code Playgroud)
我不知道为什么命令没有找到.任何帮助都会很棒.
这是我的cron工作:
plee@dragon:~$ crontab -l
* * * * * /bin/bash -l -c 'source ~/.bashrc; echo $EDITOR > /tmp/cronjob.test'
Run Code Online (Sandbox Code Playgroud)
和内部~/.bashrc文件,我有export EDITOR=vim,但在最终/tmp/cronjob.test文件中,它仍然是空的?
那么如何获取环境变量(在.bashrc文件中设置)并在我的cron作业中使用它?
plee@dragon:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 12.04 LTS
Release: 12.04
Codename: precise
plee@dragon:~$ uname -a
Linux dragon 3.2.0-26-generic-pae #41-Ubuntu SMP Thu Jun 14 16:45:14 UTC 2012 i686 i686 i386 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
如果使用这个:
* * * * * /bin/bash -l -c -x 'source ~/.bashrc; echo $EDITOR …Run Code Online (Sandbox Code Playgroud) 我想在 docker 容器中通过 cron 重复调用一个脚本,但是当我从一次性执行切换到通过 cron 执行时,官方 python 镜像似乎突然找不到 python。
Dockerfile:
FROM python:3.7-slim
COPY main.py /home/main.py
#A: works
CMD [ "python", "/home/main.py" ]
#B: doesn't work
#RUN apt-get update && apt-get -y install -qq --force-yes cron
#COPY hello-cron /etc/cron.d/hello-cron
#CMD ["cron", "-f"]
Run Code Online (Sandbox Code Playgroud)
主要.py
import time
for i in range(90000):
print(i)
time.sleep(5000)
Run Code Online (Sandbox Code Playgroud)
你好-cron:
* * * * * root python /home/main.py > /proc/1/fd/1 2> /proc/1/fd/2
#
Run Code Online (Sandbox Code Playgroud)
当我在 Dockerfile 中将 A 切换为 B 时,错误消息是:/bin/sh: 1: python: not found
谢谢大家的快速回复!添加PATH=/usr/local/bincron …
git commit我正在尝试使用 bash 脚本进行操作。我已经设置了一个 cron 作业来定期执行该脚本。如果我直接执行脚本,一切都会按预期进行。由于某种原因,当从 调用脚本时crontab,会git commit失败。这是脚本:
#!/bin/bash
cd /mnt/ebs2/sitemap
echo "Calling java application to generate sitemap"
java -jar SiteMap-1.0-jar-with-dependencies.jar -i sitemapconfig.xml -o /mnt/ebs2/sitemap/website_sitemaps -url ADSKContentURL
echo "sitemap generation complete.."
cd website_sitemaps
chmod 750 *
echo "Updated file permission, commiting to git..."
git commit -am 'automated weekly update'
git push -u
echo "git commit done..."
cd ..
Run Code Online (Sandbox Code Playgroud)
这是 crontab 的输出:
Calling java application to generate sitemap
sitemap generation complete..
Updated file permission, commiting to …Run Code Online (Sandbox Code Playgroud) 在 shell 中运行命令时(例如 sudo apt-get install aptitude),这是输出:
dpkg: warning: 'ldconfig' not found in PATH or not executable.
dpkg: warning: 'start-stop-daemon' not found in PATH or not executable.
dpkg: 2 expected program(s) not found in PATH or not executable.
NB: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin.
Run Code Online (Sandbox Code Playgroud)
这是我设置的变量:
export PATH=$PATH:/usr/local/sbin:/usr/local/bin in bashrc
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" in /etc/environment
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" in /etc/sudoerds
echo $path /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/node/node:/usr/local/sbin:/usr/local/bin
sudo echo $path
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/node/node:/usr/local/sbin:/usr/local/bin
Run Code Online (Sandbox Code Playgroud) 我做了一些研究,但所有与cron和bundle exec相关的问题都没有解决,如果已经讨论过,我将再次为我辩解。
我正在运行Ubuntu 13.10,并且有一个Ruby On Rails应用程序,该应用程序几乎不需要每隔几分钟就在Cron上运行的一些rake任务。
我运行一个每当gem时,借助该语法
every 3.minutes do
rake 'update_balance'
end
Run Code Online (Sandbox Code Playgroud)
转换为crontab文件中的这一行
0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 * * * * /bin/bash -l -c 'cd /var/fruby/releases/20140513091404 && RAILS_ENV=production bundle exec rake update_balance --silent'
Run Code Online (Sandbox Code Playgroud)
当我完全复制此行时
/bin/bash -l -c 'cd /var/fruby/releases/20140513091404 && RAILS_ENV=production bundle exec rake update_balance --silent'
Run Code Online (Sandbox Code Playgroud)
并在它的控制台中运行,它运行得很好,并且可以按预期更新数据库中的多个记录。
但是当设置为cron时,我可以看到它在/ var / log / syslog文件中运行,但是实际上并没有执行任何操作。
May 13 13:06:01 sandbox2 CRON[9656]: (root) CMD (/bin/bash -l -c 'cd /var/fruby/releases/20140513091404 && RAILS_ENV=production bundle exec rake update_balance --silent')
May 13 13:06:01 sandbox2 CRON[9655]: (CRON) info (No MTA installed, …Run Code Online (Sandbox Code Playgroud)