انجمنهای فارسی اوبونتو
کمک و پشتیبانی => انجمن عمومی => نویسنده: احمد حقیقی در 17 بهمن 1395، 03:26 بظ
-
سلام دوستان
یه سوال (این مشکل رو خیلی وقت پیش هم بهش برخورده بودم،و امروز دوباره دیدمش و میخوام دلیلش رو بفهمم)
من بش اسکریپت نوشتم که توسط cron و با یوزر root اجرا میشه (با یوزر روت هم ساخته شده)
*/2 * * * * root sh /root/foo.sh
(خط فوق در etc/cron.d/foo/ نوشته شده و فایل پرمیشن +x داره)
منتهی بعضی از کامند های داخل اسکریپتم اجرا نمی شن
و نیاز داره قبلشون sudo بذارم. به عنوان مثال در بخشی از اسکریپت نیازه تا اینترفیس ی Up بشه، اگر بدون sudo مثلا بنویسم ifconfig eth1 up ، اینترفیس آپ نمیشه، مگر اینکه sudo بیاد جلوش
ولی بش اسکریپت دستی که اجرا میشه کار میکنه
با کران ک اجرا میشه (وقتی sudo نداره) کار نمی کنه
بیت های SUID و SGUID برا هیچ کدوم ست نشدن (نه اسکریپتم نه برنامه مورد نظر) و پرمیشن اسکریپتم ۷۵۵ هستش
هیچ لاگ خطا یا هشداری هم وجود نداره
کاربر سیستم root هستش و مالک اسکریپت نوشته :)ه است.
سپاس :)
-
از چه توزیعی استفاده میکنید؟
-
از چه توزیعی استفاده میکنید؟
Debian 8.2
#uname -a
Linux XXXXX 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1+deb8u4 (2015-09-19) x86_64 GNU/Linux
-
سعی کردید که فایل رو مستقیم بدون پیشدستور sh اجرا کنید؟
مسلما نیاز هست که خط اول فایلتون چنین چیزی داشته باشه:
#!/bin/bash
-
سعی کردید که فایل رو مستقیم بدون پیشدستور sh اجرا کنید؟
مسلما نیاز هست که خط اول فایلتون چنین چیزی داشته باشه:
#!/usr/bin/bash
قبل هر چیز، ممنون از جواب هاتون
بله،این ها رو هم تست کردم قبلا.
shebang رو اینطوری نوشتم:
#!/bin/sh
و کران رو از
root sh /root/foo.sh
به این تغییر دادم:
root /root/foo.sh
ولی بازم هم کار نمیکنه
منتهی به صورت دستی که اسکریپت رو (حتی بدون sh و به صورت فراخوانی اسمش) اجرا میکنم،کار میکنه!
البته تا جایی که میدونم،وقتی با صراحت اسکریپت رو با sh یا bash یا کلا در هر زمینه ای (مثلا پایتون و ..) اجرا می کنیم. نیازی به shebang نیست. چون قبلش خودمون مفسر رو فراخوانی می کنیم
ولی بازم تست کردم و نشد.
-
با bash هم تست کردید؟ توی پستم مستقیما گفته بودم که از bash استفاده کنید :)
-
با bash هم تست کردید؟ توی پستم مستقیما گفته بودم که از bash استفاده کنید :)
آره تست کردم
تو گروه تلگرام گفتم که توی سیستم من sh به bash اشاره میکنه و فرقی ندارن
ولی با این وجود هم، کران و اسکریپت رو عوض کردم و bash گذاشتم
باز هم کار نمی کنه
و همچنین دو حالت bash foo.sh و اجرای مستقیم foo.sh (در کران) رو هم تست کردم.
و در تمامی سناریو ها، وقتی sudo میذارم،کار میکنه و بدون sudo کار نمی کنه.
-
آیا آدرس کامل برنامهها رو برای اجرای اونها نوشتید؟
برای مثال اگر نیاز به ifconfig دارید، باید بنویسید:
/sbin/ifconfig
-
آیا آدرس کامل برنامهها رو برای اجرای اونها نوشتید؟
برای مثال اگر نیاز به ifconfig دارید، باید بنویسید:
/sbin/ifconfig
خیلی ممنون :)
آره،با گذاشتن sbin درست شد!
دلیلش چی میتونه باشه؟
به خاطر working directory اسکریپت؟
از کامند های دیگه ای مثل grep, ps, echo استفاده میکنم،منتهی این ها کار میکنن و مشکلی ندارن.
و البته هیچ کدوم این ها (grep, ps, echo, ...) برای کار کردن دسترسی روت نیاز ندارن!! :-k
-
دلیلش متغیر محیطی PATH هستش که آدرسهایی مثل /sbin/ رو نداره.
-
دلیلش متغیر محیطی PATH هستش که آدرسهایی مثل /sbin/ رو نداره.
آره
درسته!!
تو سیستم خودم (PC) همه ی این ها توی /usr/bin/ هستن، اما تو دبیان ifconfig توی /sbin/ هست و ps, grep, echo توی /bin/ هستند
ممنون :)
-
دلیلش متغیر محیطی PATH هستش که آدرسهایی مثل /sbin/ رو نداره.
مثل این که دلیلش این نیست
توی $PATH من sbin/ رو دارم!
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/rvm/bin
-
تو اسکریپتی که توسط cron اجرا میکنی از PATH یک echo بگیر redirect کن به یه فایل.
تو مورد شما ظاهرا cron داره در یک environment مجزا/متفاوت اسکریپت رو اجرا میکنه.
اینها رو هم بخونید:
https://superuser.com/questions/871704/why-does-root-cron-job-script-need-sudo-to-run-properly/1046126#1046126
https://stackoverflow.com/questions/10129381/crontab-path-and-user/14694543#14694543
https://stackoverflow.com/questions/10129381/crontab-path-and-user/10129701#10129701
-
تو اسکریپتی که توسط cron اجرا میکنی از PATH یک echo بگیر redirect کن به یه فایل.
تو مورد شما ظاهرا cron داره در یک environment مجزا/متفاوت اسکریپت رو اجرا میکنه.
اینها رو هم بخونید:
https://superuser.com/questions/871704/why-does-root-cron-job-script-need-sudo-to-run-properly/1046126#1046126
https://stackoverflow.com/questions/10129381/crontab-path-and-user/14694543#14694543
https://stackoverflow.com/questions/10129381/crontab-path-and-user/10129701#10129701
ممنون بابت پاسخ و لینک ها
آره مشکل همین بود که گفتین
کران یک شل جدا از شل کاربر و همچنین روت داره و به متغیر PATH دسترسی نداره و برای اسکریپت من متغیر PATH فقط شامل مسیر های زیر بود:
/usr/bin:/bin
برای رفعش هم میشه sudo گذاشت، میشه مسیر دقیق برنامه ها رو داد و همچنین میشه متغیر های محیطی رو توی crontab ست کرد.
(لینک ها بسیار مفید هستند)