چند نکته راجع به کدی که نوشتم:
1 - برنامه ی فوق، بین هر بار اجرای دستور some_command یک ثانیه فاصله می اندازد. به این معنی که اگر اجرای دستور، خودش 0.25 ثانیه زمان ببرد، دستور، هر 1.25 ثانیه یک بار اجرا خواهد شد.
2 - خروجی دستور باید TRUE باشد.
نکته:
برای این که دستور حتما در هر ثانیه یک بار اجرا شود، می توانید کاری کنید که دستور، زمان نبرد و بلافاصله پس از اجرا، فورا return شود و در بک گراند ادامه پیدا کند
البته دقت کنید که اگر چنین کاری کنید، آن وقت اگر اجرای دستور بیش از 1 ثانیه طول بکشد، چند تا دستور همزمان اجرا خواهد شد.
اما راه حل:
برای این که دستور به محض اجرا، فورا return شود و در بک گراند ادامه پیدا کند، دستور some_command را به شکل زیر بنویسید:
کد:
nohup some_command >/dev/null &
و برای این که دو دستور همزمان اجرا نشوند، باید از lock استفاده کنید و برای این که اجرای یک دستور را به یک ثانیه محدود کنید، می توانید یک دیمون دیگر بنویسید که دستوراتی که بیش از یک ثانیه در حال اجرا هستند را kill کند و ... یا خیلی کارهای دیگر هم میشود کرد.
تذکر:
برای خاتمه دادن به اجرای دستوری که توسط nohup در بک گراند در حال اجرا است، ابتدا pid آن را به شکل زیر پیدا می کنید
کد:
ps aux |grep test.sh |awk '{print $2}'
سپس آن را با دستور kill -9 متوقف می کنید. دستور کلی به شکل زیر خواهد بود:
کد:
kill -9 `ps aux |grep test.sh |awk '{print $2}'`
البته ممکن است نیاز به کمی تغییر داشته باشد. اما ایده ی ملی همین است.