2017-06-14 59 views
0

我想設置一個cronjob來做我一個git拉和其他零散件。cronjob做一個混帳拉

我的工作是這樣的:

cd /var/www/project; git pull; composer install; composer update; 

但它從來沒有工作我試圖使局部的變化,並推動這一點,我從來沒有看到的變化我必須手動的git拉,這究竟是爲什麼?我不知道爲什麼我會在這裏得到重點,這些是明星。

在cron.log

我得到:

Jun 14 09:38:32 ip-172-31-24-22 cron[19247]: (CRON) INFO (pidfile fd = 3) 
Jun 14 09:38:32 ip-172-31-24-22 cron[19247]: (CRON) INFO (Skipping @reboot jobs -- not $ 
Jun 14 09:39:01 ip-172-31-24-22 CRON[19256]: (root) CMD (php /var/www/project/artisa$ 
Jun 14 09:39:01 ip-172-31-24-22 CRON[19257]: (root) CMD (cd /var/www/project; git pu$ 
$ionclean ] && /usr/lib/php/sessionclean) 
Jun 14 09:39:02 ip-172-31-24-22 CRON[19254]: (CRON) info (No MTA installed, discarding $ 

//

Already up-to-date. 
/bin/sh: 1: composer: not found 
/bin/sh: 1: composer: not found 
+0

登錄到cron的用戶,導航到他的家,然後執行該命令以查看正在發生的事情 – Arount

+0

您是否至少使用了一位數字而不是僅用星號來試用它? 你也可以嘗試把* /放在前面,不知道爲什麼,但爲我工作。 – Maikel

+0

也通過這個[問題](https://stackoverflow.com/questions/4883069/debugging-crontab-jobs) – hurturk

回答

0

所以,要解決/bin/sh: 1: composer: not found您可以設置絕對路徑,而不是程序名。

知道哪裏是composer

$ whereis composer 
composer: /usr/bin/composer /usr/share/man/man1/composer.1.gz 

你所需要的就是/usr/bin/composer

所以,你可以根據該更新的cron線:

* * * * * cd /var/www/project && git pull && /usr/bin/composer install && /usr/bin/composer update 

順便說一句,這裏有一些提示:

  • 不要是五星開始的cron線,這真的不是一個好的做法。
  • 首選crons的事件 - 比如git hooks,在這種情況下,你應該使用githooks。
  • 如果你想在一行內執行多個bash命令,使用&&而不是;(除非你知道你在做什麼)。
  • 我不知道這是否是一種好的做法,但是您可以在您的crontab中調用的每個程序都使用絕對路徑。 (/usr/bin/git)。
  • 一個cron線內使用cd不是很大,你應該看看,如果你可以添加參數git & composer命令從具有相同的行爲在任何地方運行它。