{"id":399,"date":"2014-10-13T23:21:15","date_gmt":"2014-10-13T22:21:15","guid":{"rendered":"http:\/\/capri.dev\/blog\/?p=399"},"modified":"2022-11-05T11:15:28","modified_gmt":"2022-11-05T10:15:28","slug":"crear-tarea-cron-con-script-ruby-en-ubuntu-14","status":"publish","type":"post","link":"https:\/\/capri.dev\/blog\/crear-tarea-cron-con-script-ruby-en-ubuntu-14\/","title":{"rendered":"Crear tarea cron con script ruby en ubuntu 14"},"content":{"rendered":"<p>Llevo varios d\u00edas con este tema y finalmente he dado con la soluci\u00f3n. El problema es que ruby necesita de un entorno de ejecuci\u00f3n, que es autom\u00e1tico cuando se ejecuta desde la l\u00ednea de comandos, pero que no se carga cuando se ejecuta desde cron.<\/p>\n<p><strong>Cosas que intent\u00e9:<\/strong><\/p>\n<ul>\n<li>Modificar el script ruby incluyendo las rutas hacia las gems usadas<\/li>\n<li>Ejecutar el script ruby desde un script de shell que inclu\u00eda todas las variables de entorno necesarias<\/li>\n<li>Usar los ficheros de entorno RVM en un script de shell<\/li>\n<li><span style=\"text-decoration: underline;\">Usar llamadas directas a los wrappers generados por RVM<\/span><\/li>\n<\/ul>\n<p>La soluci\u00f3n que funcion\u00f3 bien fue la \u00faltima, la de los wrappers de RVM, pero antes de describirla, algunas cosas \u00fatiles que tambi\u00e9n utilic\u00e9 y conviene mencionar:<\/p>\n<ul>\n<li>Al crear la tarea cron, conviene guardar los resultados en un fichero de log para saber lo que est\u00e1 ocurriendo, de este modo:\n<pre class=\"prettyprint lang-bash\">\/ruta\/hacia\/ruby \/ruta\/hacia\/script.rb &gt;&gt; \/ruta\/hacia\/fichero.log\n<\/pre>\n<\/li>\n<li>Imprescindible redirigir cualquier error de ruby tambi\u00e9n hacia el fichero de log, as\u00ed: (explicaci\u00f3n <a href=\"http:\/\/stackoverflow.com\/questions\/818255\/in-the-shell-what-is-21\" target=\"_blank\" rel=\"noopener\">aqu\u00ed<\/a>)\n<pre class=\"prettyprint lang-bash\">\/ruta\/hacia\/ruby \/ruta\/hacia\/script.rb &gt;&gt; \/ruta\/hacia\/fichero.log 2&gt;&amp;1\n<\/pre>\n<\/li>\n<li>Saber que en Ubuntu, el log de la ejecuci\u00f3n de cron se guarda en:\n<pre class=\"prettyprint lang-bash\">\/var\/log\/syslog\n<\/pre>\n<p>aunque este es un log general, por lo que para ver l\u00edneas relacionadas con cron bastar\u00e1 con hacer un grep tipo:<\/p>\n<pre class=\"prettyprint lang-bash\">grep CRON \/var\/log\/syslog\n<\/pre>\n<\/li>\n<li>Es importante que el script .rb tenga permisos de ejecuci\u00f3n, sino aunque lo puedas ejecutar manualmente por consola, cron no podr\u00e1 hacerlo. Por lo tanto:\n<pre class=\"prettyprint lang-bash\">chmod 755 script.rb\n<\/pre>\n<\/li>\n<\/ul>\n<p><strong>Soluci\u00f3n:<\/strong><br \/>\nDado que la soluci\u00f3n est\u00e1 basada en RVM, evidentemente necesitamos tenerlo instalado (si no sabes lo que es, o no sabes c\u00f3mo instalarlo, m\u00e1s informaci\u00f3n <a href=\"http:\/\/rvm.io\/\" title=\"Ruby Version Manager\" target=\"_blank\" rel=\"noopener\">aqu\u00ed<\/a>).<\/p>\n<p>B\u00e1sicamente lo que hice fue llamar a ruby con el wrapper por defecto que RVM genera para la instalaci\u00f3n global, sin embargo se puede crear un wrapper diferente con diferentes versiones de Ruby o de las gems que necesitemos. Como no soy experto en RVM y a m\u00ed en este caso me es suficiente con la instalaci\u00f3n por defecto, reemplac\u00e9 mi l\u00ednea de crontab por esta:<\/p>\n<pre class=\"prettyprint lang-bash\">0 1 * * * \/usr\/local\/rvm\/wrappers\/ruby-1.9.3-p547\/ruby \/home\/scripts\/script.rb &gt;&gt; \/home\/scripts\/script.log 2&gt;&amp;1\n<\/pre>\n<p>La carpeta \/usr\/local\/rvm\/wrappers\/ruby-1.9.3-p547 es la de la distribuci\u00f3n de ruby por defecto en mi sistema, pero debes adecuarla a tu instalaci\u00f3n.<\/p>\n<p>Despu\u00e9s de varios d\u00edas atascado viendo un fichero de log vac\u00edo o con errores de importaci\u00f3n, ver el resultado esperado fue liberador. Espero haberte ahorrado algunas horas de vida, no las malgastes! \ud83d\ude09<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Llevo varios d\u00edas con este tema y finalmente he dado con la soluci\u00f3n. El problema es que ruby necesita de un entorno de ejecuci\u00f3n, que es autom\u00e1tico cuando se ejecuta desde la l\u00ednea de comandos, pero que no se carga cuando se ejecuta desde cron. Cosas que intent\u00e9: Modificar el script ruby incluyendo las rutas hacia las gems usadas Ejecutar el script ruby desde un script de shell que inclu\u00eda todas las variables de entorno necesarias Usar los ficheros de entorno RVM en un script de shell Usar llamadas directas a los wrappers generados por RVM La soluci\u00f3n que funcion\u00f3 bien fue la \u00faltima, la de los wrappers de RVM, pero antes de describirla, algunas cosas \u00fatiles que tambi\u00e9n utilic\u00e9 y conviene mencionar: Al crear la tarea cron, conviene guardar los resultados en un fichero de log para saber lo que est\u00e1 ocurriendo, de este modo: \/ruta\/hacia\/ruby \/ruta\/hacia\/script.rb &gt;&gt; \/ruta\/hacia\/fichero.log [&hellip;]<\/p>\n<p><a class=\"more-link\" href=\"https:\/\/capri.dev\/blog\/crear-tarea-cron-con-script-ruby-en-ubuntu-14\/\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[192,194,216,193,190],"class_list":["post-399","post","type-post","status-publish","format-standard","hentry","category-tecnico","tag-cronjob","tag-linux","tag-ruby","tag-ruby-2-1","tag-scripts"],"_links":{"self":[{"href":"https:\/\/capri.dev\/blog\/wp-json\/wp\/v2\/posts\/399","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/capri.dev\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/capri.dev\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/capri.dev\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/capri.dev\/blog\/wp-json\/wp\/v2\/comments?post=399"}],"version-history":[{"count":0,"href":"https:\/\/capri.dev\/blog\/wp-json\/wp\/v2\/posts\/399\/revisions"}],"wp:attachment":[{"href":"https:\/\/capri.dev\/blog\/wp-json\/wp\/v2\/media?parent=399"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/capri.dev\/blog\/wp-json\/wp\/v2\/categories?post=399"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/capri.dev\/blog\/wp-json\/wp\/v2\/tags?post=399"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}