<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Scripting Archives - CNERIS</title>
	<atom:link href="https://cneris.com/es/category/system-administration-es/scripting/feed/" rel="self" type="application/rss+xml" />
	<link>https://cneris.com/es/category/system-administration-es/scripting/</link>
	<description></description>
	<lastBuildDate>Sun, 03 Nov 2024 17:41:24 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.2</generator>
	<item>
		<title>Error: Terminating since out of inotify watches. Consider increasing /proc/sys/fs/inotify/max_user_watches</title>
		<link>https://cneris.com/es/error-terminating-since-out-of-inotify-watches-consider-increasing-proc-sys-fs-inotify-max_user_watches/</link>
					<comments>https://cneris.com/es/error-terminating-since-out-of-inotify-watches-consider-increasing-proc-sys-fs-inotify-max_user_watches/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sun, 03 Nov 2024 17:41:24 +0000</pubDate>
				<category><![CDATA[Administración de Sistemas]]></category>
		<category><![CDATA[Centos]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Servidores dedicados]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[inotify watches]]></category>
		<category><![CDATA[max_user_watches]]></category>
		<guid isPermaLink="false">https://cneris.com/?p=2696</guid>

					<description><![CDATA[<p>Error: El error indica que el sistema ha alcanzado el límite de "inotify watches" disponibles, lo que afecta la capacidad de monitorear archivos y directorios. Esto suele ocurrir cuando hay muchas aplicaciones o procesos que requieren observar cambios en archivos y directorios. Solución: Para aumentar el límite de inotify watches, sigue estos pasos: Abre una [...]</p>
<p>The post <a href="https://cneris.com/es/error-terminating-since-out-of-inotify-watches-consider-increasing-proc-sys-fs-inotify-max_user_watches/">Error: Terminating since out of inotify watches. Consider increasing /proc/sys/fs/inotify/max_user_watches</a> appeared first on <a href="https://cneris.com/es">CNERIS</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><strong>Error:</strong> El error indica que el sistema ha alcanzado el límite de «inotify watches» disponibles, lo que afecta la capacidad de monitorear archivos y directorios. Esto suele ocurrir cuando hay muchas aplicaciones o procesos que requieren observar cambios en archivos y directorios.</p>
<p><strong>Solución:</strong> Para aumentar el límite de <code>inotify watches</code>, sigue estos pasos:</p>
<ol>
<li>Abre una terminal y verifica el valor actual con:
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary dark:bg-gray-950">
<div class="sticky top-9 md:top-[5.75rem]"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre hljs language-bash"><span class="hljs-built_in">cat</span> /proc/sys/fs/inotify/max_user_watches<br />
</code></div>
</div>
</li>
<li>Aumenta el valor temporalmente (por ejemplo, a 524288) ejecutando:
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary dark:bg-gray-950">
<div class="sticky top-9 md:top-[5.75rem]"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre hljs language-bash">sudo sysctl fs.inotify.max_user_watches=524288<br />
</code></div>
</div>
</li>
<li>Para que el cambio sea permanente, edita el archivo <code>/etc/sysctl.conf</code>:
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary dark:bg-gray-950">
<div class="sticky top-9 md:top-[5.75rem]"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre hljs language-bash">sudo nano /etc/sysctl.conf<br />
</code></div>
</div>
</li>
<li>Agrega esta línea al final del archivo:
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary dark:bg-gray-950">
<div class="sticky top-9 md:top-[5.75rem]"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre hljs language-bash">fs.inotify.max_user_watches=524288<br />
</code></div>
</div>
</li>
<li>Guarda el archivo y aplica el cambio con:
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary dark:bg-gray-950">
<div class="sticky top-9 md:top-[5.75rem]"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre hljs language-bash">sudo sysctl -p<br />
</code></div>
</div>
</li>
</ol>
<p>Después de estos pasos, el sistema debería permitir más observadores <code>inotify</code>, y el error no debería volver a aparecer.</p>
<p>The post <a href="https://cneris.com/es/error-terminating-since-out-of-inotify-watches-consider-increasing-proc-sys-fs-inotify-max_user_watches/">Error: Terminating since out of inotify watches. Consider increasing /proc/sys/fs/inotify/max_user_watches</a> appeared first on <a href="https://cneris.com/es">CNERIS</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cneris.com/es/error-terminating-since-out-of-inotify-watches-consider-increasing-proc-sys-fs-inotify-max_user_watches/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>A PHP session was created by a session_start() function call. This interferes with REST API and loopback requests. The session should be closed by session_write_close() before making any HTTP requests.</title>
		<link>https://cneris.com/es/a-php-session-was-created-by-a-session_start-function-call-this-interferes-with-rest-api-and-loopback-requests-the-session-should-be-closed-by-session_write_close-before-making-any-http-requests/</link>
					<comments>https://cneris.com/es/a-php-session-was-created-by-a-session_start-function-call-this-interferes-with-rest-api-and-loopback-requests-the-session-should-be-closed-by-session_write_close-before-making-any-http-requests/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 29 Oct 2024 09:08:22 +0000</pubDate>
				<category><![CDATA[Administración de Sistemas]]></category>
		<category><![CDATA[Centos]]></category>
		<category><![CDATA[Plesk]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Servidores dedicados]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[session start]]></category>
		<category><![CDATA[session?start]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://cneris.com/?p=2676</guid>

					<description><![CDATA[<p>Este mensaje de error ocurre porque la función session_start() está creando una sesión PHP, lo que interfiere con las solicitudes de la REST API y el loopback en WordPress. Para solucionarlo: Localiza el código de session_start() Busca en tu tema o en los plugins activos la función session_start(). Esta puede estar en el archivo functions.php [...]</p>
<p>The post <a href="https://cneris.com/es/a-php-session-was-created-by-a-session_start-function-call-this-interferes-with-rest-api-and-loopback-requests-the-session-should-be-closed-by-session_write_close-before-making-any-http-requests/">A PHP session was created by a session_start() function call. This interferes with REST API and loopback requests. The session should be closed by session_write_close() before making any HTTP requests.</a> appeared first on <a href="https://cneris.com/es">CNERIS</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Este mensaje de error ocurre porque la función <code>session_start()</code> está creando una sesión PHP, lo que interfiere con las solicitudes de la REST API y el loopback en WordPress. Para solucionarlo:</p>
<ol>
<li><strong>Localiza el código de <code>session_start()</code></strong><br />
Busca en tu tema o en los plugins activos la función <code>session_start()</code>. Esta puede estar en el archivo <code>functions.php</code> del tema o en un plugin personalizado.</li>
<li><strong>Añade <code>session_write_close()</code> después de <code>session_start()</code></strong><br />
Después de cada llamada a <code>session_start()</code>, asegúrate de que <code>session_write_close()</code> se llame antes de realizar cualquier solicitud HTTP. Esto cerrará la sesión y permitirá que la REST API funcione sin problemas. Por ejemplo:</p>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary dark:bg-gray-950">
<div class="sticky top-9 md:top-[5.75rem]">
<div class="absolute bottom-0 right-2 flex h-9 items-center">
<div class="flex items-center rounded bg-token-sidebar-surface-primary px-2 font-sans text-xs text-token-text-secondary dark:bg-token-main-surface-secondary"></div>
</div>
</div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre hljs language-php"><span class="hljs-title function_ invoke__">session_start</span>();<br />
<span class="hljs-comment">// Tu código aquí</span><br />
<span class="hljs-title function_ invoke__">session_write_close</span>();<br />
</code></div>
</div>
</li>
<li><strong>Usar el gancho <code>init</code> en WordPress</strong><br />
Si necesitas que <code>session_start()</code> esté en <code>functions.php</code>, asegúrate de envolverlo en el gancho <code>init</code> y usa <code>session_write_close()</code> de esta manera:</p>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary dark:bg-gray-950">
<div class="sticky top-9 md:top-[5.75rem]">
<div class="absolute bottom-0 right-2 flex h-9 items-center">
<div class="flex items-center rounded bg-token-sidebar-surface-primary px-2 font-sans text-xs text-token-text-secondary dark:bg-token-main-surface-secondary"></div>
</div>
</div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre hljs language-php"><span class="hljs-title function_ invoke__">add_action</span>(<span class="hljs-string">'init'</span>, function() {<br />
<span class="hljs-keyword">if</span> (!<span class="hljs-title function_ invoke__">session_id</span>()) {<br />
<span class="hljs-title function_ invoke__">session_start</span>();<br />
<span class="hljs-title function_ invoke__">session_write_close</span>();<br />
}<br />
});</code></div>
</div>
</li>
</ol>
<p>The post <a href="https://cneris.com/es/a-php-session-was-created-by-a-session_start-function-call-this-interferes-with-rest-api-and-loopback-requests-the-session-should-be-closed-by-session_write_close-before-making-any-http-requests/">A PHP session was created by a session_start() function call. This interferes with REST API and loopback requests. The session should be closed by session_write_close() before making any HTTP requests.</a> appeared first on <a href="https://cneris.com/es">CNERIS</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cneris.com/es/a-php-session-was-created-by-a-session_start-function-call-this-interferes-with-rest-api-and-loopback-requests-the-session-should-be-closed-by-session_write_close-before-making-any-http-requests/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Cómo asignar imagen destacada por defecto según la categoría</title>
		<link>https://cneris.com/es/como-asignar-imagen-destacada-por-defecto-segun-la-categoria/</link>
					<comments>https://cneris.com/es/como-asignar-imagen-destacada-por-defecto-segun-la-categoria/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 29 Oct 2024 08:58:10 +0000</pubDate>
				<category><![CDATA[Administración de Sistemas]]></category>
		<category><![CDATA[Aplicaciones Web]]></category>
		<category><![CDATA[Centos]]></category>
		<category><![CDATA[Plesk]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Servidores dedicados]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[imagen destacada por defecto]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://cneris.com/?p=2668</guid>

					<description><![CDATA[<p>En WordPress puedes asignar una imagen destacada por defecto para cada categoría de post utilizando un fragmento de código en el archivo functions.php de tu tema. Este código verifica si un post tiene una imagen destacada asignada; si no la tiene, establece una imagen predeterminada según la categoría del post. Código para asignar imagen destacada [...]</p>
<p>The post <a href="https://cneris.com/es/como-asignar-imagen-destacada-por-defecto-segun-la-categoria/">Cómo asignar imagen destacada por defecto según la categoría</a> appeared first on <a href="https://cneris.com/es">CNERIS</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>En WordPress puedes asignar una imagen destacada por defecto para cada categoría de post utilizando un fragmento de código en el archivo <code>functions.php</code> de tu tema. Este código verifica si un post tiene una imagen destacada asignada; si no la tiene, establece una imagen predeterminada según la categoría del post.</p>
<h3>Código para asignar imagen destacada por defecto según la categoría</h3>
<ol>
<li>Abre el archivo <code>functions.php</code> de tu tema (preferiblemente un tema hijo para evitar que se pierdan cambios en futuras actualizaciones).</li>
<li>Añade el siguiente código, reemplazando las URLs de las imágenes por defecto según cada categoría:</li>
</ol>
<div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary dark:bg-gray-950">
<div class="overflow-y-auto p-4" dir="ltr">
<p>function set_default_thumbnail($post_id) {<br />
if (has_post_thumbnail($post_id)) {<br />
return;<br />
}</p>
<p>// Define las imágenes predeterminadas por categoría<br />
$default_images = [<br />
&#8216;categoria-1&#8217; =&gt; &#8216;https://tu-sitio.com/wp-content/uploads/imagen-categoria1.jpg&#8217;,<br />
&#8216;categoria-2&#8217; =&gt; &#8216;https://tu-sitio.com/wp-content/uploads/imagen-categoria2.jpg&#8217;,<br />
&#8216;categoria-3&#8217; =&gt; &#8216;https://tu-sitio.com/wp-content/uploads/imagen-categoria3.jpg&#8217;,<br />
];</p>
<p>// Obtén las categorías del post<br />
$categories = get_the_category($post_id);</p>
<p>// Verifica si hay categorías asignadas y busca una imagen predeterminada<br />
foreach ($categories as $category) {<br />
if (array_key_exists($category-&gt;slug, $default_images)) {<br />
$image_url = $default_images[$category-&gt;slug];</p>
<p>// Descargar la imagen y establecerla como imagen destacada<br />
$image_id = attach_image_from_url($image_url, $post_id);<br />
if ($image_id) {<br />
set_post_thumbnail($post_id, $image_id);<br />
}<br />
break;<br />
}<br />
}<br />
}<br />
add_action(&#8216;save_post&#8217;, &#8216;set_default_thumbnail&#8217;);</p>
<p>// Función para descargar la imagen y adjuntarla al post<br />
function attach_image_from_url($image_url, $post_id) {<br />
$upload_dir = wp_upload_dir();<br />
$image_data = file_get_contents($image_url);<br />
$filename = basename($image_url);</p>
<p>if (wp_mkdir_p($upload_dir[&#8216;path&#8217;])) {<br />
$file = $upload_dir[&#8216;path&#8217;] . &#8216;/&#8217; . $filename;<br />
} else {<br />
$file = $upload_dir[&#8216;basedir&#8217;] . &#8216;/&#8217; . $filename;<br />
}</p>
<p>file_put_contents($file, $image_data);</p>
<p>$wp_filetype = wp_check_filetype($filename, null);<br />
$attachment = [<br />
&#8216;post_mime_type&#8217; =&gt; $wp_filetype[&#8216;type&#8217;],<br />
&#8216;post_title&#8217; =&gt; sanitize_file_name($filename),<br />
&#8216;post_content&#8217; =&gt; »,<br />
&#8216;post_status&#8217; =&gt; &#8216;inherit&#8217;<br />
];</p>
<p>$attach_id = wp_insert_attachment($attachment, $file, $post_id);<br />
require_once(ABSPATH . &#8216;wp-admin/includes/image.php&#8217;);<br />
$attach_data = wp_generate_attachment_metadata($attach_id, $file);<br />
wp_update_attachment_metadata($attach_id, $attach_data);</p>
<p>return $attach_id;<br />
}</p>
</div>
</div>
<h3>Explicación del código</h3>
<ul>
<li><strong><code>$default_images</code></strong>: Define las imágenes predeterminadas para cada categoría. Usa el slug de cada categoría como clave y la URL de la imagen como valor.</li>
<li><strong><code>set_default_thumbnail</code></strong>: Esta función se ejecuta al guardar un post y verifica si tiene una imagen destacada. Si no tiene, busca la primera categoría que tenga una imagen predeterminada en el array <code>$default_images</code> y la establece como imagen destacada.</li>
<li><strong><code>attach_image_from_url</code></strong>: Esta función descarga la imagen de la URL y la adjunta al post como archivo multimedia, generando así una imagen destacada.</li>
</ul>
<p>Este código asignará automáticamente una imagen destacada por defecto a los posts nuevos (o editados) según su categoría.</p>
<p><strong>Nota</strong>: Asegúrate de probar el código en un entorno de desarrollo antes de implementarlo en producción, y reemplaza las URLs de ejemplo con las URLs de las imágenes que quieres usar.</p>
<p>The post <a href="https://cneris.com/es/como-asignar-imagen-destacada-por-defecto-segun-la-categoria/">Cómo asignar imagen destacada por defecto según la categoría</a> appeared first on <a href="https://cneris.com/es">CNERIS</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cneris.com/es/como-asignar-imagen-destacada-por-defecto-segun-la-categoria/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Traffic Bot escrito en Python</title>
		<link>https://cneris.com/es/traffic-bot-escrito-en-python/</link>
					<comments>https://cneris.com/es/traffic-bot-escrito-en-python/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 02 Oct 2024 16:34:03 +0000</pubDate>
				<category><![CDATA[Administración de Sistemas]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[python bot]]></category>
		<category><![CDATA[traffic bot]]></category>
		<category><![CDATA[traffic bot python]]></category>
		<guid isPermaLink="false">https://cneris.com/?p=2333</guid>

					<description><![CDATA[<p>Traffic Bot creado en Python que se utiliza para generar tráfico web de manera automatizada. Este tipo de bots pueden ser útiles para pruebas de rendimiento, simulación de usuarios, o experimentación en desarrollo web. A continuación, te proporciono un ejemplo de código y un pequeño manual de uso para este tipo de bot. Ejemplo de [...]</p>
<p>The post <a href="https://cneris.com/es/traffic-bot-escrito-en-python/">Traffic Bot escrito en Python</a> appeared first on <a href="https://cneris.com/es">CNERIS</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><strong>Traffic Bot</strong> creado en <strong>Python</strong> que se utiliza para generar tráfico web de manera automatizada. Este tipo de bots pueden ser útiles para pruebas de rendimiento, simulación de usuarios, o experimentación en desarrollo web. A continuación, te proporciono un ejemplo de código y un pequeño manual de uso para este tipo de bot.</p>
<h4>Ejemplo de código en Python:</h4>
<p>Este script utiliza la biblioteca <strong>requests</strong> de Python para simular múltiples visitas a una URL específica.</p>
<div class="dark bg-gray-950 contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative">
<div class="flex items-center text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md h-9"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre hljs language-python"><span class="hljs-keyword">import</span> requests<br />
<span class="hljs-keyword">import</span> time</p>
<p><span class="hljs-comment"># URL del sitio web que deseas visitar</span><br />
url = <span class="hljs-string">'https://tu-sitio.com'</span></p>
<p><span class="hljs-comment"># Número de visitas que deseas realizar</span><br />
visitas = <span class="hljs-number">100</span></p>
<p><span class="hljs-comment"># Intervalo de tiempo entre las visitas en segundos</span><br />
intervalo = <span class="hljs-number">5</span></p>
<p><span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(visitas):<br />
    response = requests.get(url)<br />
    <span class="hljs-built_in">print</span>(<span class="hljs-string">f'Visita <span class="hljs-subst">{i+<span class="hljs-number">1</span>}</span>: <span class="hljs-subst">{response.status_code}</span>'</span>)<br />
    time.sleep(intervalo)<br />
</code></div>
</div>
<h4>Manual de uso:</h4>
<ol>
<li><strong>Instalación de dependencias</strong>: Necesitas instalar la biblioteca <code>requests</code> para ejecutar este script:
<div class="dark bg-gray-950 contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative">
<div class="sticky top-9 md:top-[5.75rem]">
<div class="absolute bottom-0 right-2 flex h-9 items-center">
<div class="flex items-center rounded bg-token-main-surface-secondary px-2 font-sans text-xs text-token-text-secondary"></div>
</div>
</div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre hljs language-bash">pip install requests<br />
</code></div>
</div>
</li>
<li><strong>Personalización</strong>:
<ul>
<li>Modifica la variable <code>url</code> para apuntar a la página que deseas visitar.</li>
<li>Ajusta <code>visitas</code> para definir cuántas veces el bot debe visitar el sitio.</li>
<li>Usa <code>intervalo</code> para establecer el tiempo de espera entre cada solicitud (en segundos).</li>
</ul>
</li>
<li><strong>Ejecución</strong>: Guarda el código en un archivo, por ejemplo, <code>traffic_bot.py</code>, y luego ejecútalo:
<div class="dark bg-gray-950 contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative">
<div class="sticky top-9 md:top-[5.75rem]">
<div class="absolute bottom-0 right-2 flex h-9 items-center">
<div class="flex items-center rounded bg-token-main-surface-secondary px-2 font-sans text-xs text-token-text-secondary"></div>
</div>
</div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre hljs language-bash">python traffic_bot.py<br />
</code></div>
</div>
</li>
</ol>
<p>Este bot básico simplemente visita una página web varias veces, simula tráfico y muestra el estado de las solicitudes.</p>
<p>The post <a href="https://cneris.com/es/traffic-bot-escrito-en-python/">Traffic Bot escrito en Python</a> appeared first on <a href="https://cneris.com/es">CNERIS</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cneris.com/es/traffic-bot-escrito-en-python/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Cómo detectar enlaces duplicados en una web</title>
		<link>https://cneris.com/es/como-detectar-enlaces-duplicados-en-una-web/</link>
					<comments>https://cneris.com/es/como-detectar-enlaces-duplicados-en-una-web/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 02 Oct 2024 16:02:14 +0000</pubDate>
				<category><![CDATA[Administración de Sistemas]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[python]]></category>
		<guid isPermaLink="false">https://cneris.com/?p=2325</guid>

					<description><![CDATA[<p>Detectar enlaces duplicados en una web es una tarea importante para garantizar una buena optimización del SEO y mejorar la experiencia del usuario. Aquí hay varias formas de hacerlo: Uso de herramientas en línea: Herramientas como Screaming Frog o Ahrefs te permiten rastrear todos los enlaces de un sitio web y te muestran si hay [...]</p>
<p>The post <a href="https://cneris.com/es/como-detectar-enlaces-duplicados-en-una-web/">Cómo detectar enlaces duplicados en una web</a> appeared first on <a href="https://cneris.com/es">CNERIS</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Detectar enlaces duplicados en una web es una tarea importante para garantizar una buena optimización del SEO y mejorar la experiencia del usuario. Aquí hay varias formas de hacerlo:</p>
<ol>
<li><strong>Uso de herramientas en línea</strong>:
<ul>
<li>Herramientas como <strong>Screaming Frog</strong> o <strong>Ahrefs</strong> te permiten rastrear todos los enlaces de un sitio web y te muestran si hay duplicados.</li>
<li><strong>Screaming Frog</strong> tiene una función específica para rastrear todos los enlaces internos y externos y encontrar duplicados.</li>
</ul>
</li>
<li><strong>Mediante scripts personalizados</strong>:
<ul>
<li>Puedes usar un <strong>script en Python</strong> con la biblioteca <strong>BeautifulSoup</strong> para extraer todos los enlaces y luego verificar si alguno está duplicado.</li>
</ul>
<p>Ejemplo en Python:</p>
<div class="dark bg-gray-950 contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative">
<div class="sticky top-9 md:top-[5.75rem]"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre hljs language-python"><span class="hljs-keyword">import</span> requests<br />
<span class="hljs-keyword">from</span> bs4 <span class="hljs-keyword">import</span> BeautifulSoup<br />
<span class="hljs-keyword">from</span> collections <span class="hljs-keyword">import</span> Counter</p>
<p>url = <span class="hljs-string">'https://tusitio.com'</span><br />
response = requests.get(url)<br />
soup = BeautifulSoup(response.text, <span class="hljs-string">'html.parser'</span>)</p>
<p>links = [link.get(<span class="hljs-string">'href'</span>) <span class="hljs-keyword">for</span> link <span class="hljs-keyword">in</span> soup.find_all(<span class="hljs-string">'a'</span>) <span class="hljs-keyword">if</span> link.get(<span class="hljs-string">'href'</span>)]<br />
duplicates = [item <span class="hljs-keyword">for</span> item, count <span class="hljs-keyword">in</span> Counter(links).items() <span class="hljs-keyword">if</span> count &gt; <span class="hljs-number">1</span>]</p>
<p><span class="hljs-built_in">print</span>(<span class="hljs-string">f'Enlaces duplicados: <span class="hljs-subst">{duplicates}</span>'</span>)<br />
</code></div>
</div>
</li>
<li><strong>Utilizando extensiones de navegador</strong>:
<ul>
<li>Algunas extensiones de navegador como <strong>Check My Links</strong> para Chrome permiten verificar los enlaces en una página y detectar si alguno está duplicado o roto.</li>
</ul>
</li>
</ol>
<p>The post <a href="https://cneris.com/es/como-detectar-enlaces-duplicados-en-una-web/">Cómo detectar enlaces duplicados en una web</a> appeared first on <a href="https://cneris.com/es">CNERIS</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cneris.com/es/como-detectar-enlaces-duplicados-en-una-web/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Manejo y ejemplos del comando grep</title>
		<link>https://cneris.com/es/manejo-y-ejemplos-del-comando-grep/</link>
					<comments>https://cneris.com/es/manejo-y-ejemplos-del-comando-grep/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sat, 28 Sep 2024 16:07:13 +0000</pubDate>
				<category><![CDATA[Administración de Sistemas]]></category>
		<category><![CDATA[Centos]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Servidores dedicados]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[comando grep]]></category>
		<category><![CDATA[linux]]></category>
		<guid isPermaLink="false">https://cneris.com/?p=2265</guid>

					<description><![CDATA[<p>El comando grep es una herramienta muy utilizada en sistemas Unix/Linux para buscar patrones en archivos de texto. Es útil para filtrar líneas que coincidan con un texto o expresión regular específica. Sintaxis básica grep [opciones] "patrón" archivo patrón: El texto o la expresión regular que deseas buscar. archivo: El archivo en el que deseas [...]</p>
<p>The post <a href="https://cneris.com/es/manejo-y-ejemplos-del-comando-grep/">Manejo y ejemplos del comando grep</a> appeared first on <a href="https://cneris.com/es">CNERIS</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>El comando <code>grep</code> es una herramienta muy utilizada en sistemas Unix/Linux para buscar patrones en archivos de texto. Es útil para filtrar líneas que coincidan con un texto o expresión regular específica.</p>
<h4><strong>Sintaxis básica</strong></h4>
<div class="dark bg-gray-950 contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative">
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre hljs language-bash">grep [opciones] <span class="hljs-string">"patrón"</span> archivo<br />
</code></div>
</div>
<ul>
<li><code>patrón</code>: El texto o la expresión regular que deseas buscar.</li>
<li><code>archivo</code>: El archivo en el que deseas realizar la búsqueda.</li>
</ul>
<h4><strong>Ejemplos comunes:</strong></h4>
<ol>
<li><strong>Buscar una palabra específica en un archivo:</strong>
<div class="dark bg-gray-950 contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative">
<div class="flex items-center text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md h-9"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre hljs language-bash">grep <span class="hljs-string">"palabra"</span> archivo.txt<br />
</code></div>
</div>
</li>
<li><strong>Buscar de manera insensible a mayúsculas/minúsculas:</strong>
<div class="dark bg-gray-950 contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative">
<div class="flex items-center text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md h-9"></div>
<div class="sticky top-9 md:top-[5.75rem]"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre hljs language-bash">grep -i <span class="hljs-string">"palabra"</span> archivo.txt<br />
</code></div>
</div>
</li>
<li><strong>Buscar en múltiples archivos:</strong>
<div class="dark bg-gray-950 contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative">
<div class="flex items-center text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md h-9"></div>
<div class="sticky top-9 md:top-[5.75rem]"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre hljs language-bash">grep <span class="hljs-string">"palabra"</span> *.txt<br />
</code></div>
</div>
</li>
<li><strong>Buscar líneas que no contienen un patrón:</strong>
<div class="dark bg-gray-950 contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative">
<div class="sticky top-9 md:top-[5.75rem]">
<div class="absolute bottom-0 right-2 flex h-9 items-center">
<div class="flex items-center rounded bg-token-main-surface-secondary px-2 font-sans text-xs text-token-text-secondary"></div>
</div>
</div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre hljs language-bash">grep -v <span class="hljs-string">"palabra"</span> archivo.txt<br />
</code></div>
</div>
</li>
<li><strong>Contar cuántas veces aparece una palabra en un archivo:</strong>
<div class="dark bg-gray-950 contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative">
<div class="sticky top-9 md:top-[5.75rem]">
<div class="absolute bottom-0 right-2 flex h-9 items-center">
<div class="flex items-center rounded bg-token-main-surface-secondary px-2 font-sans text-xs text-token-text-secondary"></div>
</div>
</div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre hljs language-bash">grep -c <span class="hljs-string">"palabra"</span> archivo.txt<br />
</code></div>
</div>
</li>
<li><strong>Mostrar el número de línea donde aparece la palabra:</strong>
<div class="dark bg-gray-950 contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative">
<div class="sticky top-9 md:top-[5.75rem]">
<div class="absolute bottom-0 right-2 flex h-9 items-center">
<div class="flex items-center rounded bg-token-main-surface-secondary px-2 font-sans text-xs text-token-text-secondary"></div>
</div>
</div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre hljs language-bash">grep -n <span class="hljs-string">"palabra"</span> archivo.txt<br />
</code></div>
</div>
</li>
</ol>
<h4><strong>Uso avanzado:</strong></h4>
<p>Puedes combinar <code>grep</code> con otros comandos, como <code>cat</code> o <code>find</code>, para búsquedas más complejas. Por ejemplo:</p>
<ul>
<li>Buscar archivos que contienen una palabra específica en un directorio:
<div class="dark bg-gray-950 contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative">
<div class="sticky top-9 md:top-[5.75rem]">
<div class="absolute bottom-0 right-2 flex h-9 items-center">
<div class="flex items-center rounded bg-token-main-surface-secondary px-2 font-sans text-xs text-token-text-secondary"></div>
</div>
</div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre hljs language-bash">find . -<span class="hljs-built_in">type</span> f | xargs grep <span class="hljs-string">"palabra"</span></code></div>
</div>
</li>
</ul>
<p>The post <a href="https://cneris.com/es/manejo-y-ejemplos-del-comando-grep/">Manejo y ejemplos del comando grep</a> appeared first on <a href="https://cneris.com/es">CNERIS</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cneris.com/es/manejo-y-ejemplos-del-comando-grep/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Script en Python para loggear y postear en un foro Discuz</title>
		<link>https://cneris.com/es/script-en-python-para-loggear-y-postear-en-un-foro-discuz/</link>
					<comments>https://cneris.com/es/script-en-python-para-loggear-y-postear-en-un-foro-discuz/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sat, 28 Sep 2024 15:47:11 +0000</pubDate>
				<category><![CDATA[Administración de Sistemas]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[discuz]]></category>
		<category><![CDATA[logging]]></category>
		<category><![CDATA[posting]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[scripting]]></category>
		<guid isPermaLink="false">https://cneris.com/?p=2259</guid>

					<description><![CDATA[<p>#!/usr/bin/python3 # -*- coding: utf-8 -*- import logging import re import requests class AutoDiscuz: LOGIN_URL = "/member.php?mod=logging&amp;action=login&amp;loginsubmit=yes" LOGIN_POST = {"username": "", "password": ""} def __init__(self, forum_url, user_name, password): """初始化论坛 url、用户名、密码和代理服务器.""" self.forum_url = forum_url self.user_name = user_name self.password = password self.formhash = None self.is_login = False self.session = requests.Session() logging.basicConfig(level=logging.INFO, format="[%(levelname)1.1s %(asctime)s] %(message)s") def login(self): """登录论坛.""" [...]</p>
<p>The post <a href="https://cneris.com/es/script-en-python-para-loggear-y-postear-en-un-foro-discuz/">Script en Python para loggear y postear en un foro Discuz</a> appeared first on <a href="https://cneris.com/es">CNERIS</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>#!/usr/bin/python3<br />
# -*- coding: utf-8 -*-</p>
<p>import logging<br />
import re</p>
<p>import requests</p>
<p>class AutoDiscuz:<br />
LOGIN_URL = «/member.php?mod=logging&amp;action=login&amp;loginsubmit=yes»<br />
LOGIN_POST = {«username»: «», «password»: «»}</p>
<p>def __init__(self, forum_url, user_name, password):<br />
«»»初始化论坛 url、用户名、密码和代理服务器.»»»<br />
self.forum_url = forum_url<br />
self.user_name = user_name<br />
self.password = password<br />
self.formhash = None<br />
self.is_login = False<br />
self.session = requests.Session()<br />
logging.basicConfig(level=logging.INFO,<br />
format=»[%(levelname)1.1s %(asctime)s] %(message)s»)</p>
<p>def login(self):<br />
«»»登录论坛.»»»<br />
url = self.forum_url + AutoDiscuz.LOGIN_URL<br />
AutoDiscuz.LOGIN_POST[«username»] = self.user_name<br />
AutoDiscuz.LOGIN_POST[«password»] = self.password<br />
req = self.session.post(url, data=AutoDiscuz.LOGIN_POST)<br />
if self.user_name in req.text:<br />
self.is_login = True<br />
if self.get_formhash():<br />
logging.info(«Login success!»)<br />
return<br />
logging.error(«Login faild!»)</p>
<p>def get_formhash(self):<br />
«»»获取 formhash.»»»<br />
req = self.session.get(self.forum_url)<br />
rows = re.findall(<br />
r»&lt;input type=\»hidden\» name=\»formhash\» value=\»(.*?)\» /&gt;», req.text)<br />
if len(rows) != 0:<br />
self.formhash = rows[0]<br />
logging.info(«Formhash is: » + self.formhash)<br />
return True<br />
else:<br />
logging.error(«None formhash!»)<br />
return False</p>
<p>def reply(self, tid, subject=»», msg=»6666666666666666666&#8243;):<br />
«»»回帖.»»»<br />
url = self.forum_url + \<br />
«/forum.php?mod=post&amp;action=reply&amp;replysubmit=yes&amp;inajax=1&amp;tid=» + \<br />
str(tid)<br />
post_data = {«formhash»: self.formhash,<br />
«message»: msg, «subject»: subject}<br />
content = self.session.post(url, post_data).text<br />
if «发布成功» in content:<br />
logging.info(«Tid: » + str(tid) + » reply success!»)<br />
return True<br />
else:<br />
logging.error(«Tid: » + str(tid) + » reply faild!»)<br />
return False</p>
<p>def main():<br />
auto_discuz = AutoDiscuz(«http://url», «account», «password»)<br />
auto_discuz.login()<br />
if auto_discuz.is_login:<br />
auto_discuz.reply(tid=1000)</p>
<p>if __name__ == «__main__»:<br />
main()</p>
<p>The post <a href="https://cneris.com/es/script-en-python-para-loggear-y-postear-en-un-foro-discuz/">Script en Python para loggear y postear en un foro Discuz</a> appeared first on <a href="https://cneris.com/es">CNERIS</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cneris.com/es/script-en-python-para-loggear-y-postear-en-un-foro-discuz/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Got error &#8216;PHP message: PHP Fatal error:  Uncaught Error: [] operator not supported for strings in /www/base-admin.class.php</title>
		<link>https://cneris.com/es/got-error-php-message-php-fatal-error-uncaught-error-operator-not-supported-for-strings-in-www-base-admin-class-php/</link>
					<comments>https://cneris.com/es/got-error-php-message-php-fatal-error-uncaught-error-operator-not-supported-for-strings-in-www-base-admin-class-php/#comments</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Fri, 30 Aug 2024 07:20:23 +0000</pubDate>
				<category><![CDATA[Administración de Sistemas]]></category>
		<category><![CDATA[Aplicaciones Web]]></category>
		<category><![CDATA[Centos]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Servidores dedicados]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[fatal error]]></category>
		<category><![CDATA[PHP Fatal error]]></category>
		<category><![CDATA[php message]]></category>
		<category><![CDATA[revslider]]></category>
		<category><![CDATA[revslider error]]></category>
		<guid isPermaLink="false">https://cneris.com/?p=2210</guid>

					<description><![CDATA[<p>El error que estás encontrando, "PHP Fatal error: Uncaught Error: [] operator not supported for strings", indica que en el archivo base-admin.class.php del plugin Revolution Slider (o RevSlider), estás intentando usar el operador [] para agregar un valor a una variable que ha sido declarada como cadena de texto (string). Este operador [] se utiliza [...]</p>
<p>The post <a href="https://cneris.com/es/got-error-php-message-php-fatal-error-uncaught-error-operator-not-supported-for-strings-in-www-base-admin-class-php/">Got error &#8216;PHP message: PHP Fatal error:  Uncaught Error: [] operator not supported for strings in /www/base-admin.class.php</a> appeared first on <a href="https://cneris.com/es">CNERIS</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>El error que estás encontrando, <strong>«PHP Fatal error: Uncaught Error: [] operator not supported for strings»</strong>, indica que en el archivo <code>base-admin.class.php</code> del plugin <strong>Revolution Slider</strong> (o <strong>RevSlider</strong>), estás intentando usar el operador <code>[]</code> para agregar un valor a una variable que ha sido declarada como cadena de texto (string). Este operador <code>[]</code> se utiliza para añadir elementos a un array, no para manipular strings.</p>
<p>Para solucionar este error, debes modificar el código para asegurarte de que la variable en cuestión es un array antes de intentar añadirle elementos con <code>[]</code>.</p>
<h3>Pasos para solucionar el error:</h3>
<ol>
<li><strong>Ubica el archivo y la línea problemáticos:</strong>
<ul>
<li>El error indica la ubicación específica del archivo y la línea donde ocurre el problema: <code>/www/httpdocs/wp-content/plugins/revslider/includes/framework/base-admin.class.php</code>.</li>
</ul>
</li>
<li><strong>Edita el archivo:</strong>
<ul>
<li>Abre el archivo en un editor de texto o en el editor de código de tu elección.</li>
</ul>
</li>
<li><strong>Encuentra la línea problemática:</strong>
<ul>
<li>Dirígete a la línea del código que está causando el error. Busca la línea que utiliza el operador <code>[]</code> en una variable que podría estar inicializada como string.</li>
</ul>
</li>
<li><strong>Asegúrate de que la variable es un array:</strong>
<ul>
<li>Antes de usar el operador <code>[]</code>, verifica si la variable es un array. Si no lo es, conviértela a un array. Puedes hacerlo de la siguiente manera:</li>
</ul>
<div class="dark bg-gray-950 contain-inline-size rounded-md border-[0.5px] border-token-border-medium">
<div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre hljs language-php"><span class="hljs-keyword">if</span> (!<span class="hljs-title function_ invoke__">is_array</span>(<span class="hljs-variable">$variable</span>)) {<br />
<span class="hljs-variable">$variable</span> = [];<br />
}<br />
<span class="hljs-variable">$variable</span>[] = <span class="hljs-variable">$value</span>; <span class="hljs-comment">// Aquí es donde se añade un valor al array</span><br />
</code></div>
</div>
<ul>
<li>Si la variable está inicializada como una cadena de texto (string), conviértela en un array:</li>
</ul>
<div class="dark bg-gray-950 contain-inline-size rounded-md border-[0.5px] border-token-border-medium">
<div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre hljs language-php"><span class="hljs-keyword">if</span> (<span class="hljs-title function_ invoke__">is_string</span>(<span class="hljs-variable">$variable</span>)) {<br />
<span class="hljs-variable">$variable</span> = [];<br />
}<br />
<span class="hljs-variable">$variable</span>[] = <span class="hljs-variable">$value</span>;<br />
</code></div>
</div>
</li>
<li><strong>Guarda los cambios y prueba:</strong>
<ul>
<li>Después de hacer estos cambios, guarda el archivo y recarga la página o funcionalidad que estaba generando el error.</li>
</ul>
</li>
<li><strong>Actualiza o reemplaza el plugin:</strong>
<ul>
<li>Si esta solución es compleja o si el problema persiste, considera actualizar el plugin a la versión más reciente. A veces, los desarrolladores del plugin ya han solucionado estos problemas en versiones más recientes.</li>
</ul>
</li>
</ol>
<p>Si no te sientes cómodo editando el código, te recomiendo hacer una copia de seguridad del archivo original antes de hacer cualquier cambio. También podrías considerar contactar al soporte del plugin para obtener ayuda específica.</p>
<p>The post <a href="https://cneris.com/es/got-error-php-message-php-fatal-error-uncaught-error-operator-not-supported-for-strings-in-www-base-admin-class-php/">Got error &#8216;PHP message: PHP Fatal error:  Uncaught Error: [] operator not supported for strings in /www/base-admin.class.php</a> appeared first on <a href="https://cneris.com/es">CNERIS</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cneris.com/es/got-error-php-message-php-fatal-error-uncaught-error-operator-not-supported-for-strings-in-www-base-admin-class-php/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Cómo Crear un Script para Automatizar Backups en un Servidor Dedicado con Vhosts de Diferentes Sitios Web</title>
		<link>https://cneris.com/es/como-crear-un-script-para-automatizar-backups-en-un-servidor-dedicado-con-vhosts-de-diferentes-sitios-web/</link>
					<comments>https://cneris.com/es/como-crear-un-script-para-automatizar-backups-en-un-servidor-dedicado-con-vhosts-de-diferentes-sitios-web/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Fri, 23 Aug 2024 20:56:31 +0000</pubDate>
				<category><![CDATA[Administración de Sistemas]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[automatizar backups]]></category>
		<category><![CDATA[backup vhosts]]></category>
		<category><![CDATA[script para backups]]></category>
		<category><![CDATA[scripting]]></category>
		<category><![CDATA[servidor dedicado]]></category>
		<category><![CDATA[vhosts]]></category>
		<guid isPermaLink="false">https://cneris.com/?p=1999</guid>

					<description><![CDATA[<p>Automatizar los backups en un servidor dedicado que aloja múltiples sitios web mediante vhosts es esencial para garantizar la seguridad y disponibilidad de los datos. En este artículo, aprenderás a crear un script en Bash para automatizar el proceso de respaldo de los diferentes sitios web alojados en un servidor con vhosts. Incluiré ejemplos de [...]</p>
<p>The post <a href="https://cneris.com/es/como-crear-un-script-para-automatizar-backups-en-un-servidor-dedicado-con-vhosts-de-diferentes-sitios-web/">Cómo Crear un Script para Automatizar Backups en un Servidor Dedicado con Vhosts de Diferentes Sitios Web</a> appeared first on <a href="https://cneris.com/es">CNERIS</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Automatizar los backups en un servidor dedicado que aloja múltiples sitios web mediante vhosts es esencial para garantizar la seguridad y disponibilidad de los datos. En este artículo, aprenderás a crear un script en Bash para automatizar el proceso de respaldo de los diferentes sitios web alojados en un servidor con vhosts. Incluiré ejemplos de código para que puedas implementarlo fácilmente.</p>
<p><strong>Paso 1: Configuración del Entorno</strong></p>
<p>Antes de comenzar a escribir el script, asegúrate de que tu servidor tenga acceso SSH configurado y que poseas privilegios de root o sudo. Además, necesitarás un directorio donde se almacenarán los backups.</p>
<p><strong>Paso 2: Creación del Script de Backup</strong></p>
<p>A continuación, se muestra un ejemplo de un script en Bash que automatiza los backups de los vhosts. Este script comprimirá los archivos de cada sitio web y los almacenará en un directorio de respaldo.</p>
<div class="dark bg-gray-950 rounded-md border-[0.5px] border-token-border-medium">
<div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre hljs language-bash"><span class="hljs-meta">#!/bin/bash</span><br />
</code></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre hljs language-bash"><span class="hljs-comment"># Directorio donde se almacenarán los backups</span><br />
</code></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre hljs language-bash">backup_dir=<span class="hljs-string">"/var/backups"</span><br />
</code></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre hljs language-bash"><span class="hljs-comment"># Fecha actual</span><br />
<span class="hljs-built_in">date</span>=$(<span class="hljs-built_in">date</span> +<span class="hljs-string">'%Y-%m-%d'</span>)<br />
</code></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre hljs language-bash"><span class="hljs-comment"># Directorio de vhosts</span><br />
vhosts_dir=<span class="hljs-string">"/etc/apache2/sites-available"</span><br />
</code></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre hljs language-bash"><span class="hljs-comment"># Crear directorio de backup si no existe</span><br />
<span class="hljs-built_in">mkdir</span> -p <span class="hljs-string">"<span class="hljs-variable">$backup_dir</span>/<span class="hljs-variable">$date</span>"</span><br />
</code></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre hljs language-bash"><span class="hljs-comment"># Loop a través de cada vhost y realizar el backup</span><br />
<span class="hljs-keyword">for</span> vhost <span class="hljs-keyword">in</span> $(<span class="hljs-built_in">ls</span> <span class="hljs-string">"<span class="hljs-variable">$vhosts_dir</span>"</span>); <span class="hljs-keyword">do</span><br />
site_name=$(<span class="hljs-built_in">basename</span> <span class="hljs-string">"<span class="hljs-variable">$vhost</span>"</span> .conf)<br />
tar -czf <span class="hljs-string">"<span class="hljs-variable">$backup_dir</span>/<span class="hljs-variable">$date</span>/<span class="hljs-variable">$site_name</span>.tar.gz"</span> <span class="hljs-string">"/var/www/<span class="hljs-variable">$site_name</span>"</span><br />
<span class="hljs-keyword">done</span><br />
</code></div>
</div>
<p><strong>Paso 3: Programar el Script</strong></p>
<p>Para que el script se ejecute automáticamente, puedes programarlo utilizando cron. Para editar el cron, ejecuta el siguiente comando:</p>
<div class="dark bg-gray-950 rounded-md border-[0.5px] border-token-border-medium">
<div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre hljs language-bash">$ crontab -e<br />
</code></div>
</div>
<p>Agrega la siguiente línea para que el script se ejecute diariamente a las 2 AM:</p>
<div class="dark bg-gray-950 rounded-md border-[0.5px] border-token-border-medium">
<div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md"></div>
<div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre hljs language-javascript"><span class="hljs-number">0</span> <span class="hljs-number">2</span> * * * <span class="hljs-regexp">/ruta/</span>al/script/backup_script.<span class="hljs-property">sh</span><br />
</code></div>
</div>
<p><strong>Conclusión:</strong></p>
<p>Automatizar los backups de tus vhosts es una excelente manera de asegurar que tus datos estén protegidos sin necesidad de intervención manual. Este script proporciona una solución simple y efectiva para mantener copias de seguridad regulares de tus sitios web.</p>
<p>The post <a href="https://cneris.com/es/como-crear-un-script-para-automatizar-backups-en-un-servidor-dedicado-con-vhosts-de-diferentes-sitios-web/">Cómo Crear un Script para Automatizar Backups en un Servidor Dedicado con Vhosts de Diferentes Sitios Web</a> appeared first on <a href="https://cneris.com/es">CNERIS</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cneris.com/es/como-crear-un-script-para-automatizar-backups-en-un-servidor-dedicado-con-vhosts-de-diferentes-sitios-web/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Crear un Script para Avisar de Falta de Espacio en Disco Duro y Enviar una Notificación por Correo Electrónico</title>
		<link>https://cneris.com/es/crear-un-script-para-avisar-de-falta-de-espacio-en-disco-duro-y-enviar-una-notificacion-por-correo-electronico/</link>
					<comments>https://cneris.com/es/crear-un-script-para-avisar-de-falta-de-espacio-en-disco-duro-y-enviar-una-notificacion-por-correo-electronico/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 22 Aug 2024 22:20:10 +0000</pubDate>
				<category><![CDATA[Administración de Sistemas]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[monitorizar el espacio]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[scripting]]></category>
		<guid isPermaLink="false">https://cneris.com/?p=1992</guid>

					<description><![CDATA[<p>Monitorear el espacio en disco es crucial para asegurar que los servidores y sistemas no se queden sin espacio, lo que podría causar la pérdida de datos o fallas en el sistema. En este artículo, aprenderás a crear un script en Bash que monitoree el espacio en disco y envíe una notificación por correo electrónico [...]</p>
<p>The post <a href="https://cneris.com/es/crear-un-script-para-avisar-de-falta-de-espacio-en-disco-duro-y-enviar-una-notificacion-por-correo-electronico/">Crear un Script para Avisar de Falta de Espacio en Disco Duro y Enviar una Notificación por Correo Electrónico</a> appeared first on <a href="https://cneris.com/es">CNERIS</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Monitorear el espacio en disco es crucial para asegurar que los servidores y sistemas no se queden sin espacio, lo que podría causar la pérdida de datos o fallas en el sistema. En este artículo, aprenderás a crear un script en Bash que monitoree el espacio en disco y envíe una notificación por correo electrónico cuando el espacio libre caiga por debajo de un umbral específico.<br />
Pasos para Crear el Script<br />
1. Crear el Script Bash:<br />
Crea un archivo de script, por ejemplo `monitor_espacio.sh`:<br />
«`bash<br />
#!/bin/bash</p>
<p># Configuración<br />
UMBRAL=20 # Porcentaje mínimo de espacio libre en disco<br />
CORREO=»tucorreo@ejemplo.com»</p>
<p># Obtener el porcentaje de espacio libre en disco<br />
ESPACIO_LIBRE=$(df / | grep / | awk &#8216;{ print $4 }&#8217; | sed &#8216;s/%//g&#8217;)</p>
<p># Verificar si el espacio libre es menor que el umbral<br />
if [ «$ESPACIO_LIBRE» -lt «$UMBRAL» ]; then<br />
# Enviar correo electrónico de advertencia<br />
echo «Atención: El espacio en disco es menor que $UMBRAL%. Espacio disponible: $ESPACIO_LIBRE%.» | mail -s «Alerta: Poco Espacio en Disco» $CORREO<br />
fi<br />
«`</p>
<p>2. Configurar Permisos:<br />
Asegúrate de que el script tenga permisos de ejecución:<br />
«`bash<br />
chmod +x monitor_espacio.sh<br />
«`</p>
<p>3. Configurar Cron Job:<br />
Para ejecutar el script de forma periódica, puedes configurarlo en cron:<br />
«`bash<br />
crontab -e<br />
«`<br />
Agrega la siguiente línea para ejecutar el script cada hora:<br />
«`bash<br />
0 * * * * /ruta/al/script/monitor_espacio.sh<br />
«`</p>
<p>Conclusión<br />
Con este sencillo script, podrás monitorear de manera efectiva el espacio en disco y recibir alertas por correo electrónico cuando el espacio sea insuficiente, lo que te permitirá tomar acciones preventivas.</p>
<p>The post <a href="https://cneris.com/es/crear-un-script-para-avisar-de-falta-de-espacio-en-disco-duro-y-enviar-una-notificacion-por-correo-electronico/">Crear un Script para Avisar de Falta de Espacio en Disco Duro y Enviar una Notificación por Correo Electrónico</a> appeared first on <a href="https://cneris.com/es">CNERIS</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cneris.com/es/crear-un-script-para-avisar-de-falta-de-espacio-en-disco-duro-y-enviar-una-notificacion-por-correo-electronico/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
